シェルでもC言語のようなif文が使用できる。
シェルで使用するif文の形式は次の通り。
if(条件) then
コマンド
endif
if(条件) then
コマンド1
else
コマンド2
endif
if(条件1) then
コマンド1
else if(条件2) then
コマンド2
.
.
else
コマンドn
endif
if(条件) コマンド
以上のようにthen と endif がC言語の { と } に対応すると思えば、大体C言語と似ている。
条件のところには
==, !=, >, <, >=, <=
など、C言語で数値を比較する演算子(ただし、整数のみ)が使用できる。
そして、==, != などでは数値だけでなく文字列の比較もできる。
2つ以上の条件を組み合わせる時は
&&, ||, ( )
などのようなC言語と同じもの使用できる。
条件を否定する時も!というC言語と同じ記号が使用できる。
もう一つ、条件の部分が0以外なら条件が成り立ち、0ならば成り立たないところもC言語と似ている。
また、Cシェル独自のものとして、ファイルやディレクトリなどの、存在を確かめる条件も使用することができる。
まず、コマンドラインからifを色々と試してみる。
ここでは実行するコマンドの例としてechoコマンドを使用しているが、もちろんこのコマンド以外のコマンドも使用できる。
# if(1) echo test <- 条件が1(0以外)ならば test <- コマンド(echo)が実行される # if(0) echo test <- 条件が0ならばコマンド(echo)は実行されない # set x = 3 # if($x > 1) echo test <- 条件が成り立っているので test <- コマンド(echo)が実行される # if($x + 2 > 1) echo test <- 条件に数式を使う test # set y = 2.5 # if($y > 1.0) echo test <- 条件に実数が使われていると if: Badly formed number. <- エラーになる # set z = aaa # if($z == "aaa") echo test <- 文字列同士を比べる test # ls test1.ma test2.ma # set f = test1.ma # if(-f $f) echo $f exist <- test1.maが存在するかどうか調べてコマンドを実行 test1.ma exist # set files = ( `ls *.mb` ) # if($#files > 0) echo test <- *.mbファイルが1つ以上あればコマンドを実行 # cat test1.ma | wc -l <- test1.maの行数を調べるコマンド 238 <- test1.maの行数は238 # if(`cat test1.ma | wc -l` > 200) echo test <- test1.maの行数が200以上であればコマンドを実行 test
次に、ifを使ってデータファイルが存在していればMAYAでレンダリングするシェルスクリプトを作って実行してみよう。
viで以下のシェルスクリプト(render.sh)を作る。
上のシェルスクリプトを実行すると以下のようになる。
set f = test.ma
if(-f $f) then
Render $f
endif
# ls test.ma render.sh # csh render.sh ....... <- test.maをレンダリング #
# ls test1.ma test2.ma render.sh # csh render.sh test1.ma ....... <- test1.maをレンダリング # csh render.sh test2.ma ....... <- test2.maをレンダリング #
# ls test.ma render.sh # csh render.sh test.ma ....... <- test.maをレンダリング # csh render.sh abc.ma abc.ma not exist <- abc.maが無いというメッセージを出力 #