このエントリーをはてなブックマークに追加


forループのサンプル

シェルスクリプトの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


添付ファイル: filesample-1.sh 1509件 [詳細] filesample-2.sh 1350件 [詳細] filesample-3.sh 1194件 [詳細] filesample-4.sh 832件 [詳細] filesample-5.sh 819件 [詳細] filesample-6.sh 786件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:27:07