繰り返し処理の基本【シェルスクリプト】
- 最終更新:
- 公開日:
シェルスクリプトでの繰り返し処理について、基本的な構文などの内容をメモしておきます。
for文、while文、while read、カウントアップ(インクリメント)の使い方など。
筆者は初心者なので、なるべくシンプルなサンプルを考えて書きました。
筆者の更新時の環境は、Linux Debian9です。
for文で値につき繰り返し処理
for文は与えた要素に対して処理を繰り返すことができます。
下の例では変数で要素を与えていますが、直接書いても良いです。
処理内容は、doからdoneの間に書きます。
STR='イモリ ヤモリ トカゲ'
for VAR in ${STR}
do
echo "${VAR}かわいい"
done
#〜in `echo "イモリ ヤモリ トカゲ"`
in以降はバッククウォートを使うなどしたコマンドも書けます。
grepでソートしたものを処理対象にする場合などで使えます。
値は半角空白で区切ります。要素に半角を含む場合には注意が必要です。
whileを使って一定条件になるまで繰り返す
処理する値などが確定していない場合は、while文で処理すると便利です。
whileの横に条件を設定し、その条件が満たされる限り、繰り替えして処理をします。
特定の値や回数などで制御することが考えられます。
処理内容は、doからdoneの間に書きます。
#特定文字列の入力で終了させる例
while [ ${TXT} != end ]
do
echo '文字列を入力して下さい。endで終了。'
read TXT
echo "${TXT} ←出力"
done
上の例では、入力した文字を表示することを繰り返すだけの単純な処理をしています。
条件式が文字列「end」の否定「!=」なので、endを入力しない限り処理を繰り返し、入力内容をendにしたときに、whileから抜けることになります。
カウントアップで一定回数だけ繰り返す
whileで一定回数だけ処理を繰り替えしたい場合には、数字をカウントアップさせます。
ちなみに、一つずつ数を足していくことを「インクリメント」、一つずつ数を減らしていくことを「デクリメント」と言います。
#インクリメントの例
E=0; B=0; L=0;
while [ $L -lt 3 ]
do
E=`expr $E + 1`
echo "$E ←Expr"
B=$(( $B + 1 ))
echo "$B ←Bashの算術式"
let L++
echo "$L ←Let"
done
上の例では、三種類のインクリメントを挙げています。
一回繰り返すごとに変数に1ずつ足していき、「-lt」は「<」の意味なので、0から三回
繰り替えしてwhileから抜けることになります。
一行ずつ読み込む「while read」
他のファイルなどの記載を一行ずつ読み込んで、それぞれの行について、繰り返し処理する場合には、「while read」が便利です。
読み込むファイルの最終行には改行が必要です。
下では変数LINEが一行ずつの内容を示しています。
#変数STRの内容はファイルの代わり
STR='カレー
パスタ
ハンバーグ'
while read LINE
do
echo "${LINE}美味しい"
done < <(echo "${STR}")
#↑の「<(コマンド)」の部分はファイルのパスの代わり
「while read」にパイプで読み込む内容を渡すこともできますが、この場合は外部で定義した変数を変更できないので、上で書いてあるようなやり方で覚えておいた方が良さそうです。