条件によって処理を分けたいときに用いるのが「if」。次のように記述する。
条件式が0であった場合には,then以降の処理を行う。条件式には,testや[...]が利用できる。たとえば,以下のようなシェル・スクリプト「check_file.sh」があったとする。
#!/bin/sh
if [ -e $1 ]
then
echo "I can find \"$1\"."
fi
条件式では位置パラメータ$1に書かれたファイルが存在すれば,
$ ./check_file.sh arrive_file
I can find "arrive_file".
のようにメッセージを表示する。
ifに「else」を使うと条件式に合わなかった(つまり,0以外)場合に処理を施すようにできる。elseは以下のように利用する。
if 条件式
then
条件式が真の時の処理
else
条件式が偽の時の処理
fi
こうすることで条件式が真の場合は,thenからelseまでの処理が行われ,偽の場合はelse以降の処理が行われる。たとえば,以下のようなシェル・スクリプト「check_file.sh」があったとする。
#!/bin/sh
if [ -e $1 ]
then
echo "I can find \"$1\"."
else
echo "I cannot find \"$1\"."
fi
条件式では位置パラメータ$1に書かれたファイルが存在しなければ,
$ ./check_file.sh none_file
I cannot find "none_file".
のようにメッセージを表示する。
ifに「elif」を使うと,複数の条件式を使った分岐処理が行える。elifは以下のように利用する。
if 条件式1
then
条件式1が真の時の処理
elif 条件式2
条件式2が真の時の処理
elif 条件式3
then
条件式3が真の時の処理
:
else
すべての条件式が偽の時の処理
fi
まず,条件式1を評価し,真の場合はthenからの処理を行う。もし,偽であった場合は次の条件式2を評価し,真であった場合はその後に書かれている処理を,偽であった場合は条件式3を評価する。このように,条件式が真になるものが現われるまで条件式を次々と評価していく。もし,すべての条件式が偽であった場合には,elseの処理を実行する。ちなみに,elseは省略できる。
たとえば,以下のようなシェル・スクリプト「week.sh」があったとする。
#!/bin/sh
$nowtime=`date +%u`
if [ $nowtime -le 4 ]
then
echo "You have to work..."
elif [ $nowtime -eq 5 ]
then
echo "You can drink many beer soon!"
else
echo "Have a relax day."
fi
このスクリプトを実行すると,実行した曜日ごとに異なるメッセージが表示される。たとえば,金曜日なら,
$ ./week.sh
You can drink many beer soon!
のようにメッセージが表示される。