シェルでif文


#!/bin/sh
hoge='Hello'

if [ "$hoge" = hello ] ; then
echo '$hogeはhello'
else
echo '$hogeはhelloじゃない'
fi


このコードだと
1行目にシェルスクリプトであることを宣言して
2行目でhogeにHelloを代入。


ifは条件分岐で、内の条件がTRUE(OK)ならthen〜elseの間を実行して
elseからfiの間を無視。
内がfalse(NO)ならthen〜elseを無視してelseからfiの間を実行。
fiでif文を〆る。

※echoは出力結果を参照するコマンド


上記のコードで、実行すると

$hogeはhelloじゃない


が出力。
ifの条件文ではfalseだったということ。


$helloにはHelloが入っているはずなので、それで結果がfalseなのだから
シェルは大文字と小文字を判別することが判明。


ifの後ろの[]は、testコマンドの代用でもある。
元々は

if test "$mage" = hello ; then


というように、で囲まずにtestコマンドを条件文の前に付ければいいのだけどで代用というか略することができる。見易いし。


helloとthenの間にある「;」セミコロンは、行変更の目印。
本来はif[]とthenはそれぞれ1行ずつに分けて記載するのだけど、「;」を入れることで
改行の意を示してくれる。※コードが下に長くなって読みにくくなるのを避けることの一助に。


あと、if文の条件文の演算子例が下記。

■$hogeが数値

[ "$hoge" -ge 10 ] $hogeの数値が10以上ならTRUE
[ "$hoge" -le 10 ] $hogeの数値が10以下ならTRUE
[ "$hoge" -gt 10 ] $hogeの数値が11以上ならTRUE
[ "$hoge" -lt 10 ] $hogeの数値が10未満ならTRUE
[ "$hoge" -eq 10 ] $hogeの数値が10と等しければTRUE
[ "$hoge" -ne 10 ] $hogeの数値が10と等しくなければTRUE


■$hogeが文字列

[ "$hoge" = Hello ] $hogeの文字列がHelloに等しければTRUE
[ "$hoge" != Hello ] $hogeの文字列がHelloに等しくなければTRUE
[ -n "$hoge" ] $hogeの数値が1以上ならTRUE
[ -z "$hoge" ] $hogeのの文字列長が 0 ならばTRUE


■$hogeがファイル

[ -d "$hoge" ] $hogeディレクトリならTRUE
[ -s "$hoge" ] $hogeが0以上ならTRUE
[ -e "$hoge" ] $hogeが存在するならTRUE
[ -s "$hoge" ] $hogeが0以上ならTRUE
[ -r "$hoge" ] $hogeが読み取り可能ならTRUE
[ -w "$hoge" ] $hogeが書き込み可能ならTRUE
[ -x "$hoge" ] $hogeが実行可能ならTRUE


.