シェルスクリプトの繰り返し処理の方法とはまりやすいエラーの対処法を紹介します。
for文
繰り返し処理をする回数が明白である、または規則的に増加または減少する変数を使うときfor文を用います。
シェルスクリプトでは以下のように記述します。
for 変数 in リスト
do
処理
done
リストの値を一つずつ変数varに代入し、処理をします。
varsの最後の要素をvarに代入したら繰り返し処理を終了します。
bashなら、以下のようにC言語に似たような構文で繰り返し処理を実行することができます。
for (( 開始条件;終了条件;間隔)){
処理
}
具体例
for i in 0 1 2 3 4 5 6 7 8 9
do
echo $i
done
for(( i=0;i<10;i++)){
echo $i
}
こちら上記2つの例は同じで、0から9まで1つずつ増加させながら変数iに代入し、出力を行います。
for文応用
リストを*にするとカレントディレクトリのファイル名が入ります。
カレントディレクトリは以下の通りです。
$ ls
sample_00.txt sample_01.txt sample_02.txt
sample.sh
#!/bin/bash
for i in *
do
echo $i
done
実行
$ bash sample.sh
sample_00.txt
sample_01.txt
sample_02.txt
while文
繰り返し処理をする回数が決まっていない、ある条件の下で繰り返し処理をしたいときに用います。
while [ 条件式 ]
do
処理
done
条件式のもとで繰り返し処理を実行します。
したがって、for文のように回数が決まっている、規則的に変化する変数を用いる場合でも使用できます。
よくあるエラーとして以下が挙げられます。
sample.sh
#!/bin/bash
i=0
while [ $i -lt 10]
do
echo $i
i=$((i+1))
done
実行
sample.sh: line 5: while[ 0 -lt 10 ]: command not found
sample.sh: line 6: syntax error near unexpected token `do'
sample.sh: line 6: `do'
whileと[の間にスペースがないと上記のエラーメッセージが出ます。
sample.sh: line 5: [0: command not found
sample.sh: line 5: [: missing `]'
条件式と]の間にスペースがないと上記のエラーメッセージが出ます。
要は、whileと[の間、[と条件式の間、条件式と]の間にはスペースが必要です。
while文でtestコマンド
while test 条件式
do
処理
done
この場合、上記で紹介したエラーメッセージは出ません。
まとめ
シェルスクリプトではfor文とwhile文で繰り返し処理をします。