forループ
CoddyのTerminalジャーニー「基礎」セクションの一部。レッスン 71/82。
同じ操作を何度も繰り返す必要がある場合があります。同じコマンドを何度も書く代わりに、forループを使って項目のリストを順に処理し、それぞれに対して操作を実行できます。
Bashにおけるforループの基本構造は次のとおりです。
#!/bin/bash
for name in Alice Bob Charlie; do
echo "Hello, $name!"
doneこのスクリプトは、リスト内の各名前に対して挨拶を出力します。変数 name には、順番にそれぞれの値が代入されます。最初は "Alice"、次に "Bob"、その次に "Charlie" です。do キーワードはループ本体の開始を示し、done はその終了を示します。
forループは、ワイルドカードと組み合わせると特に強力です。ディレクトリ内のすべてのファイルをループで処理できます。
#!/bin/bash
for file in *.txt; do
echo "Processing $file"
doneこれは現在のディレクトリにあるすべての.txtファイルを順に処理します。繰り返しごとに、file変数には現在のファイル名が格納されるため、各ファイルに対する処理を自動的に実行できます。
知っておくべき意外な点が1つあります。パターンに一致するファイルがまったくない場合、Bashはパターンを展開しません。その場合、ループはまったく実行されないのではなく、値としてリテラルテキスト*.txtを使って1回実行されます。
ブレース展開を使って数値の範囲をループすることもできます。
#!/bin/bash
for i in {1..5}; do
echo "Number: $i"
doneこれは1から5までの数字を出力します。forループを使うと、繰り返し作業をわずか数行のコードで実行できるため、スクリプトの効率が上がり、保守もしやすくなります。
チャレンジ
簡単countdown.shという名前のシェルスクリプトを作成し、forループを使って5から1までカウントダウンを表示します。
スクリプトの要件:
- シバン行(
#!/bin/bash)から始める - ブレース展開を使ったforループで、5から1までの数値を順に処理する
- 各数値を独立した行に、次の形式で表示する:
Countdown: [number]
スクリプトを実行可能にして、実行してください。出力は次のようになります:
Countdown: 5
Countdown: 4
Countdown: 3
Countdown: 2
Countdown: 1ヒント:
{5..1}を使って降順の範囲を作成します。ループ内では、ループ変数がiのとき、echo "Countdown: $i"を使います。
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Terminalプレイグラウンド