[シェルプログラミング] - ifの使い方

注意:文法

単純なミスでよくはまってしまいます。

【正しい書き方】

以下の書き方が正解。
ifの後ろに半角スペース必要
"["の後には半角スペース、"]"の前にも半角スペースが必要です。
if [ "1"="1" ]

【NG例】

以下の書き方はエラーになります。
if ["1"="1"]

注意:空文字の比較

文字列を=や!=で比較する時も同じです。この書き方自分的に違和感があるので、よく間違えます。

【NG例】

# -nは1文字以上ならTrue
RET=""
if [ -n ${RET} ]; then
  echo "こっちにくる"  # 空文字を比較したいなら「"」で囲わないとだめ
else
  echo "こっちにこない"
fi

【正しい書き方】

# -nは1文字以上ならTrue
RET=""
if [ -n "${RET}" ]; then
  echo "こっちにこない"  # なんで?こっち?
else
  echo "こっちにくる"
fi

# -zは0文字ならTrue
RET=""
if [ -z "${RET}" ]; then
  echo "こっちにくる"
else
  echo "こっちにこない"
fi

文例

見慣れていない書き方がありました。
以前は以下のように書いていたので「; then」となっていて?となりました。

if [ "1"="1" ]
then
    echo "1"
else
    echo "2"
fi

確かに、行数は少なくなります。こっちも見やすさの方が上なのかな

if [ "1" = "1" ]; then
    echo "1"
else
    echo "2"
fi

この記事が気に入ったらサポートをしてみませんか?