seq コマンドを使うと簡単にできます。以下のコマンドで 1 から 5 までの数字を改行区切りで得られます。
#!/bin/bash seq 1 5
seq コマンドの結果を用いてループする場合は以下のようになります。
#!/bin/bash # for 文の場合 end=5 for i in $(seq 1 $end); do echo $i done # while 文の場合 - サブシェルパターン end=5 seq 1 $end | while read -r i; do echo $i done # while 文の場合 - プロセス置換パターン end=5 while read -r i; do echo $i done < <(seq 1 $end)
ちなみにループしたいだけであれば、Bash のみなりますが二重丸括弧 (( ))
を用いて for 文で書くこともできます。
#!/bin/bash end=5 for ((i = 1; i <= $end; i++)); do echo $i done
他には Ruby の Range オブジェクトの作り方に近い記法もあり、以下のようになります。結果は同じですが、この方法だと範囲として指定している数値部分を変数にすることはできません。
#!/bin/bash for i in {1..5}; do echo $i done