シェルスクリプトの制御構造

制御構造の種類

シェルでは次の制御文が使える。

if, while, switch などはC言語と似た使い方ができるが、 foreach はシェル独特のものである。

ifの使い方

if文の形式は次の通り。

  1. 
    if(条件) then
        文
    endif
    
    
  2. 
    if(条件) then
        文
    else
        文
    endif
    
    
  3. 
    if(条件1) then
        文
    else if(条件2) then
        文
    .
    .
    else
        文
    endif
    
    
  4. 
    if(条件) コマンド
    
    

then と endif がC言語の { と } に対応すると思えば、大体C言語と似ている。
条件文のところには

==, !=, >, <, >=, <=, &&, ||

など、C言語で数値を比較する、演算子が使用できる。
また、==, != などでは数値だけでなく文字列の比較もできる。
Cシェル独自のものとして、 ファイルやディレクトリなどの、存在を確かめる条件も使用することができる。

-f ファイル名
ファイルが存在するかどうか
-d ディレクトリ名
ディレクトリが存在するかどうか
-e ファイル名(ディレクトリ名)
ファイル名のファイルかディレクトリどちらかが存在するかどうか
-r ファイル名(ディレクトリ名)
ファイル名のファイルかディレクトリが自分の読めるものかどうか
-w ファイル名(ディレクトリ名)
ファイル名のファイルかディレクトリが自分の書き込めるものかどうか
-x ファイル名
ファイル名のファイルが自分の実行できるものかどうか
-o ファイル名(ディレクトリ名)
ファイル名のファイルかディレクトリが自分のものかどうか
-z ファイル名
ファイル名のファイルが大きさが0かどうか

(例)

#!/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文の形式は次の通り。

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文の形式は次の通り。

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文の形式は次の通り。

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
#

参考


Prev | Next
Home | Contents
abe@injapan.net