今回はシェルスクリプトのfor文の書き方を徹底解説したいと思います。
まずは、基本的な書き方から紹介していきたいと思います。
<スポンサードリンク>
Contents
1. inを使った基本的なfor文
#!/bin/bash for i in a b c d e do echo $i done
inを使う書き方です。inの第一引数からfor文の変数iに代入され実行されます。
上記シェルスクリプトを実行すると、「a」から「e」まで順次表示されます。
% bash test.sh a b c d e
2. seqコマンドを使ったfor文
#!/bin/bash for i in `seq 10` do echo ${i}回目 done
次にseqコマンドを使ったfor文です。
ループ回数が決まっている場合は、seqの引数としてループ回数を指定して書くと便利です。
% bash test.sh 1回目 2回目 3回目 4回目 5回目 6回目 7回目 8回目 9回目 10回目
3. 配列の要素分for文を回す
#!/bin/bash array=(1 2 3 4 5 6 7 8 9 10) for i in ${array[@]} do echo ${i}回目 done
次は配列の要素を使ったfor文です。
実行結果は、下記の通りです。
% bash test.sh 1回目 2回目 3回目 4回目 5回目 6回目 7回目 8回目 9回目 10回目
4. 配列の要素数分for文を回す
#!/bin/bash array=(1 2 3 4 5 6 7 8 9 10) for i in `seq ${#array[@]}` do echo ${i}回目 done
配列の要素数分for分を回したい場合の書き方です。
#array[@]でなく、#array[*]でも同様の結果になります。
% bash test.sh 1回目 2回目 3回目 4回目 5回目 6回目 7回目 8回目 9回目 10回目
<スポンサードリンク>
5. コマンドの実行結果を利用
#!/bin/bash for file_name in `ls /var/log/*wifi*` do echo ${file_name} done
2のseqコマンドを使ったfor分もここに含まれますが、上のサンプルのようにコマンドの実行結果をinの引数としてfor分を書くこともできます。
コマンドを`(シングルクオート)で囲んで書くだけです。
上記スクリプトの実行結果は下記のようになります。
% bash test.sh /var/log/wifi.log /var/log/wifi.log.0.bz2 /var/log/wifi.log.1.bz2 /var/log/wifi.log.2.bz2 /var/log/wifi.log.3.bz2 /var/log/wifi.log.4.bz2 /var/log/wifi.log.5.bz2
6. ファイルを読み込みfor分を回す
あらかじめ下記のようなファイルを作成しておきます。
% cat test.txt a b c d e f g
5の「コマンドを利用したfor文」を応用してファイルの中身を表示するfor分を書きたいと思います。
#!/bin/bash for line in `cat ./test.txt` do echo ${line} done
上記スクリプトの実行結果は、下記の通りになります。
% bash test.sh a b c d e f g
7. 指定した数値の範囲のfor文を回したい
100から110まで合計したい場合などは、上記のように書きます。
#!/bin/bash num=0 for i in {100..110} do num=$((num + i)) done echo $num
上記を実行すると下記のようになります。
% bash test.sh 1155
もしよろしければ、フォロー、他の記事もよろしくお願いいたします(.. )//
関連記事