シェルでは次の制御文が使える。
if, while, switch などはC言語と似た使い方ができるが、 foreach はシェル独特のものである。
if文の形式は次の通り。
if(条件) then 文 endif
if(条件) then 文 else 文 endif
if(条件1) then 文 else if(条件2) then 文 . . else 文 endif
if(条件) コマンド
then と endif がC言語の { と } に対応すると思えば、大体C言語と似ている。
条件文のところには
==, !=, >, <, >=, <=, &&, ||
など、C言語で数値を比較する、演算子が使用できる。
また、==, != などでは数値だけでなく文字列の比較もできる。
Cシェル独自のものとして、
ファイルやディレクトリなどの、存在を確かめる条件も使用することができる。
#!/bin/csh -f
if(-f test.c) then
cc test.c
a.out
else
echo test.c not exist
endif
上のシェルスクリプトを実行すると以下のようになる。
# vi docc.sh # ls docc.sh # csh docc.sh test.c not exist # vi test.c <- test.c を作る # csh test.sh (cc test.c を実行) (a.out を実行) #
while文の形式は次の通り。
while(条件) 文 end
条件が成り立つ時にendまでの部分を繰り返し実行する。
条件はif文の(条件)と同じである。
#!/bin/csh -f
set i = 1
while($i <= 5)
mv tmp$i test$i
@ i ++
end
上のシェルスクリプト(chname.sh)を実行すると以下のようになる。
# vi chname.sh # csh chname.sh (mv tmp1 test1 が実行される) (mv tmp2 test2 が実行される) (mv tmp3 test3 が実行される) (mv tmp4 test4 が実行される) (mv tmp5 test5 が実行される) #
switch文の形式は次の通り。
switch(変数) case 値1 : 文 breaksw case 値2 : 文 breaksw . . default : 文 endsw
変数の値が値1と等しければ、case 値1 :からbreakswまでを、
変数の値が値2と等しければ、case 値2 :からbreakswまでを実行して
全てのcaseに等しいものがなければ、default :以下endswまでの部分を実行する。
値は数値でも文字列でもどちらでも良い。
またdefault :の部分は必要なければ省略できる。
#!/bin/csh -f
switch($argv[1])
case 1 :
echo first
breaksw
case 2 :
echo second
breaksw
case 3 :
echo third
breaksw
default :
echo other
endsw
上のシェルスクリプト(switch.sh)を実行すると、以下のようになる。
# vi switch.sh # csh switch.sh 2 second # csh switch.sh aaaaa other #
foreach文の形式は次の通り。
foreach 変数 (値...) 文 end
値を左から順番に変数に代入して、end までを実行してゆく。
値は数値でも文字列でもどちらでも良い。
#!/bin/csh -f
foreach x (123 test 12.5)
echo $x
end
上のシェルスクリプト(foreach.sh)を実行すると以下のようになる。
# vi foreach.sh # csh foreach.sh 123 test 12.5 #