# Shell : if文、数字を正規表現で分岐

Chanpu-·2021년 12월 31일
0

# Shell

목록 보기
8/10
post-thumbnail

作成理由:

値が変動するStatusがあって、正規表現で最後のけたには何が入ってもOKというコードを作成


下記はcat -e file.txtで見た確認必要な値

385381$
385380$
385381$

### Check: MemoryMBUsed
source_filepath="/home/stack/tmp/healthcheck_dir/cbis_checkfiles/MemoryMB_list.txt"

i=1
#end_number=`wc -l "${source_filepath}" 2>&1 | awk '{print $1}'`

while read line; do
        if [ $i -lt $end_number ] && [ "${line}" == "39288*" ]; then
                ((i+=1))
        elif [ $i -eq $end_number ]; then
                echo "# Check MemoryMBUsed="${ok_status}""
        else
                echo "# Check MemoryMBUsed="${ko_status}""
                echo ">>> Line:$i:Error"
                break
        fi
done < "${source_filepath}"

下記のところでエラーが発生(・ω・)ノ
まあ、書き方が間違っているだろう...
と思ったらend_numberにコメントが入っていた(笑)

if [ $i -lt $end_number ] && [ "${line}" == "39288*" ]; then

再実行してみたら、失敗
なんで?だと思ってTest Scriptを作成して試して見た。


Failed case

if [ 1 == * ]; then
        echo "True"
else
        echo "False"
fi	


エラーメッセージ : Too many arguments...?

Failed case

if [ 1 == "*" ]; then
        echo "True"
else
        echo "False"
fi


エラーメッセージは消えたが、正しい結果には至らず
何が気に食わないのか教えてくれ ( ´ー`)

Failed case

調べたところ、Bashは文字列と数字の区別がないようだ。
つまり[" "]で囲むことは関係ないということ

if [ 1 ==* ]; then
        echo "True"
else
        echo "False"
fi

良く分からず、右側の空白を消してみたら、
エラーメッセージ : unary operator expected

Success case#

if [ 1==* ]; then
        echo "True"
else
        echo "False"
fi

余計に空白を入れないのがよさそうだ。
繊細な奴だな(・ω・)ノ

profile
何とかしちゃおう (*´ω`)

0개의 댓글