4.6 構文

csh スクリプトでは、作業の流れを制御する、 C 言語に似た以下のような構文が利用できます。

if 文には、2 種類の形式があり、一つは

if ( expr ) command
で、expr は式が入り、その値が真 (0 以外) ならコマンド command が実行されます。 この場合、command 部分には複数のコマンドは書けません。

もう一つは、

if ( expr ) then
  command
  ...
else if ( expr ) then
  command
  ...
else
  command
  ...
endif
という形式です。 この形式では、else if ブロックはいくつあっても構いませんし (なくても構いません)、else ブロックもなくても構いません。 各ブロックでは、複数のコマンド行を書くこともできますし、 もちろんその中にさらに if 文を書くことも可能です。

while 文は、以下のような形式です。

while ( expr )
  command
  ...
end
C 言語の while 文と同様に、式 expr が真 (0 以外) である間、 while ブロックの end までのコマンドの実行を繰り返します。 C 言語でも使用する break 命令や、continue 命令も使えます。

foreach 文は、以下のような形式です。

foreach var ( str1 ... strn )
  command
  ...
end
これは、 まず後ろのかっこ内 (リスト) の先頭の値 str1 を変数 var に代入して end までの一連のコマンドを実行し、 次に 2 番目の値を var に代入して実行し、 それをリストの最後の値 strn まで繰り返します。 これは C 言語には直接対応するものはありませんが (for 文とは少し違います)、 ある種のループになっていて、 やはり break や continue が使用できます。

switch 文は以下のような形式です。

switch ( string )
case label1:
  command
  ...
  breaksw
case label2:
  command
  ...
  breaksw
default:
  command
  ...
  breaksw
endsw
これは C 言語の switch 文とほぼ同様ですが、 string を文字列として label1, label2 等と比較し、 C 言語では各 case ブロックから抜け出すのに break を使いますが、 csh スクリプトの switch 文では breaksw を使い、 switch 文の終わりは endsw と書きます。

goto ジャンプ命令は、

goto label
のようにジャンプ先ラベル名を指定して書くだけです。 ジャンプ先ラベルは、
label:
のように名前の後ろに : をつけて書いただけの行を 任意の位置に置きます。

exit は、単にそこでスクリプトを強制終了します。 引数をつけて

exit ( expr )
とすることもできますが、あまり使用することはないと思います。

竹野茂治@新潟工科大学
2008年1月13日