変数に引数を代入し処理を実行、処理が終わると次の引数を変数に代入し処理を再実行。最後の引数まで処理が実行される。ループを途中で抜ける場合は break を用いても良い。詳しくは制御構造 break を参照。
■基本的な書式
for 変数 in 引数1 引数2 ・・・ 引数n
do
処理
done
|
■サンプルスクリプト
スペースで区切られた生年月日(1980年2月13日 4時5分) をCSV(カンマで区切られた値)に変換するスクリプト。このサンプルだと一つの値しか処理できませんが、これを参考にカスタマイズすれば大量のデータを一括でCSVに変換するスクリプトを作れると思います。
※行最後にあるカンマは不要ですが、サンプルのため削除する処理は入れていません。
#!/bin/sh
for cnt in 1980 2 13 4 5
do
printf "${cnt},"
done |
■出力結果
ユーザーに変数を選択させ、処理を実行し続ける。延々と「選択と処理」が継続されるためBREAKを用いてループを抜ける。WHILE・CASE・READを組み合わせても同様の処理が可能。
■基本的な書式
select 変数 in
引数1 引数2 ・・・ 引数n
do
処理
done
■ifとbreakを組み合わせた応用例の書式
select 変数 in
引数1 引数2 引数3
do
if [ 条件1 ]
then
処理1
elif [ 条件2 ]
then
処理2
elif [ 条件3 ]
then
処理3
break
done
処理4
※条件1の初期は処理1が、条件2の時は処理2が、条件3の時はBREAKでループ終了する。1か2を選んだ場合は先頭に戻りループが再開される。
条件3の場合、breakによってselectのループが終了し、終了処理4に入る。終了処理4に相当するものがなく処理3でプログラムを終了させたい場合は、break の代わりに exit としておけば良い。breakを使った場合は、select から抜けるだけなので引き続き処理4の部分を追記していくことが可能。
|
■サンプルスクリプト
変数actの内容を検査し、exitでなければ du コマンドで対象ディレクトリの合計ファイルサイズを確認。exitの場合はスクリプトをbreakでループを抜けて、終了メッセージを表示する。
#!/bin/sh
select act in var opt home exit
do
if [ ${act} = exit ]
then
break
else
du -h --max-depth=0 /${act}
fi
done echo "exit"
|
■実行結果
[root@localhost ]# ./select.sh
1) var
2) opt
3) home
4) exit
#? 1
66M /var
#? 2
4.0K /opt
#?
1) var
2) opt
3) home
4) exit
#? 4
exit
[root@localhost ]#
|
|
|
|