FOR ループと WHILE 文

Bashスクリプト入門

Alex Scriven

Data Scientist

基本の FOR ループ構造

Python:

for x in range(3):
    print(x)
0
1
2

R:

for (x in seq(3)){
    print(x)
}
[1] 1
[1] 2
[1] 3
Bashスクリプト入門

Bash の FOR ループ

Bash の基本構造もほぼ同じです。

for x in 1 2 3

do echo $x done
1
2
3
Bashスクリプト入門

FOR ループの数値範囲

Bash には数値範囲を作る「ブレース展開」があります。

  • {START..STOP..INCREMENT}
for x in {1..5..2}

do echo $x done
1
3
5
Bashスクリプト入門

FOR ループの三式構文

もう一つの一般的な FOR の書き方が「3 つの式」構文です。

  • 3 つの式を二重かっこで囲む
  • 先頭は開始式(x=2)
  • 中央は終了条件(x<=4)
  • 末尾は増減式(x+=2)

 

 

for ((x=2;x<=4;x+=2))
do 
    echo $x
done
2
4
Bashスクリプト入門

グロブ展開(glob)

Bash では、* を使ったパターン展開で for ループにファイル群を渡せます(例: ディレクトリ内のファイル)。

例として、/books フォルダにテキストが 2 つあるとします。

for book in books/*
do  
    echo $book
done
books/book1.txt
books/book2.txt
Bashスクリプト入門

シェルの入れ子(再掲)

$() 記法でシェル中でコマンドを実行できるのを覚えていますか?

for ループにそのまま渡せます。

次のようなフォルダ構成を想定します。

books ディレクトリの構成

Bashスクリプト入門

シェル内シェルから FOR ループへ

シェル内シェルの結果をループできます。

for book in $(ls books/ | grep -i 'air')

do echo $book done
AirportBook.txt
FairMarketBook.txt
Bashスクリプト入門

WHILE 文の構文

FOR ループに似ていますが、各反復で判定される条件を設定します。

条件が満たされる間、反復が続きます。

  • for の代わりに while を使う
  • 条件は角かっこで囲む
    • IF 文と同じ数値比較フラグを使用(例: -le)
  • 複数条件は連結可能。二重角かっこや &&(AND)、||(OR)も使用可
  • 停止させる変更をループ内に入れる(でないと無限ループ)
Bashスクリプト入門

WHILE 文の例

簡単な例です。

x=1

while [ $x -le 3 ];
do echo $x ((x+=1)) done
1
2
3
Bashスクリプト入門

無限ループに注意

終了条件が満たされない無限 WHILE ループに注意。

x=1
while [ $x -le 3 ]; 
do
    echo $x
    # x を増やさないと 3 に到達しない
    # ((x+=1)) 
done

これは 1 を延々と出力します。

Bashスクリプト入門

練習しましょう!

Bashスクリプト入門

Preparing Video For Download...