コマンド
if
sh・bash の if文 (if・then・elif・else・fi)
if コマンドは、sh・bash において条件判定を行うための内部コマンドである。
この項では、if 文自体の説明を行う。もし、
if [ "$foo" = "bar" ]; then
などの条件の書き方について調べている場合は、test コマンドの項を参照してほしい。
また、csh・tcsh の if についてはこの項では述べない。
▼cond1 なら cmd1 を実行する。
▼cond1 なら cmd1 を実行し、そうでないなら cmd2 を実行する。
if cond1; then cmd1; else cmd2; fi
▼cond1 なら cmd1 を実行し、そうでなく cond2 なら cmd2 を実行する。
if cond1; then cmd1; elif cond2; then cmd2; fi
▼cond1 なら cmd1 を実行し、そうでなく cond2 なら cmd2 を実行し、いずれでもないなら cmd3 を実行する。
if cond1; then cmd1; elif cond2; then cmd2; else cmd3; fi
elif〜then は何個でも重ねることができる。
if cond1; then cmd1; elif cond2; then cmd2; elif cond3; then cmd3; else cmd4; fi
elseif でも elsif でも else if でもなく、elif であることに注意。
上記はあえて 1行で書いてみたが (1行で書く際は、「then と elif と else の後ろにはセミコロン不要」と覚えよう)、よくある書き方は下記だろうか。
if cond1; then
cmd1
elif cond2; then
cmd2
else
cmd3
fi
さらに行を分けていくと、最終的にはセミコロンが不要となる。
if
cond1
then
cmd1
elif
cond2
then
cmd2
else
cmd3
fi
なお、
の cond1・cmd1 は、正確には list である。ここでいう list は「0個以上のコマンドをセミコロン・改行・&&・||・& でつなげたもの」。よって、
if ls; date; pwd; then cal; hostname; whoami; fi
という書き方もできる。
●then や else 直後の空ブロック
由緒正しい sh では、then や else の後を空にすることができるので、
if [ .... ]; then
# 〜〜なので何もしない
else
...
fi
と書けるが、bash ではエラーになる。そのような場合は
if [ .... ]; then
# 〜〜なので何もしない
:
else
...
fi
と空コマンド (:) を入れておくとよい。