シェル・スクリプト・リファンレス
コマンド集(機能別) | コマンド集(アルファベット順) | コマンド逆引き大全 | シェル・スクリプト・リファンレス

 条件によって処理を分ける「if」

 条件によって処理を分けたいときに用いるのが「if」。次のように記述する。


if 条件式
then
	処理
fi

 条件式が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!

のようにメッセージが表示される。