シェルスクリプトのforループのサンプルを以下に記します。
サンプル例としては、ある値からある値までのループ、ファイルの行単位のループ、コマンドから出力された文字列群をループなどを記述します。
尚、利用したシェルはbashになります。
例えばi=0からi=10までのループをしたい場合のシェルスクリプトサンプルを以下に記します。
#/bin/bash for i in `seq 0 10` do echo i=$i done
seqコマンドに関しては以下のリンクの記事を参照してください。
以下のように記述することもできます。
#/bin/bash for i in {0..10} do echo i=$i done
テキストファイルを行単位でリードして処理をしたい場合のループは以下のように記述します。
以下のテキストファイルを行単位でリードする例を記します。
$ cat 1.txt hello world konnichiwa sekai
#!/bin/bash for l in `cat 1.txt` do echo l=$l done
1行内にスペースが含まれる場合は上記(sample-3.sh)では意図した動作になりません。
これは、区切り文字としてスペースが有効になっているからです。
環境変数IFSの値を変更し1行内にスペースが含まれていても区切らないで行単位でリードするには以下のように記述します。
IFS環境変数に関しては以下のリンクの記事を参照してください。
以下のテキストファイルを行単位でリードする例を記します。(途中に半角スペースが含まれています。)
$ cat 2.txt hello world konnichiwa sekai
#!/bin/bash IFS_BACKUP=$IFS IFS=$'\n' for l in `cat 2.txt` do echo l=$l done IFS=$IFS_BACKUP
内容的には上記と同じですがlsコマンドを使ってディレクトリのみ表示するサンプルスクリプトを以下に記述します。
以下のようなファイルとディレクトリが存在するlsコマンドの出力からディレクトリのみ表示します。
$ ls -F a.txt b.txt c.txt dir1/ dir2/ dir3/
ls -Fオプションに関しては以下のリンクの記事を参照してください。
#!/bin/bash for d in `ls -F | grep /$` do echo d=$d | tr -d '/' done
キーワードを指定すれば指定したキーワード分ループします。
#!/bin/bash for k in JPY USD RMB EUR do echo k=$k done
実行結果
$ ./sample-6.sh k=JPY k=USD k=RMB k=EUR