それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

bash で指定回数ループする方法いろいろ for / while など

bash で指定回数ループする方法のあれこれまとめ

bash で使える方法です。sh では使えません。

while で10回ループ

bash 算術演算のカッコと組み合わせて強いです。

#!/usr/bin/env bash 


while (( cnt++ < 10  )); do

  echo $cnt
done

break も使えます。

break の導入の if 分も比較演算子を (()) で使えます。

#!/usr/bin/env bash 

while (( cnt++ < 10  )); do

  echo $cnt
  if (( cnt > 5 )) ;then 
    break
  fi
done

for で 10 回ループーC言語スタイル

bash には (()) と for を組み合わせ使えるものがあります。

注意 for 中は$i++ でなく、i++ のようになる

#!/usr/bin/env bash 

for (( i=0; i< 10 ; i++ )); do 
  echo $i
done

for もbreak が使えます。

for で 10回ループ - 展開

JavaScriptなどでおなじみの for .. in ループ

for i in {0...9}; do 
  echo $i

  if (( i > 5 )) ;then 
    break
  fi
done

seq コマンドを使う。

seq コマンドを使う事もできます。

for i in `seq 0 9` ; do 
 echo $i;
done

C言語スタイル

通常のプログラミング言語と同じ for も使える。

for (( idx=0 ; idx<10; idx++  )) ; do
  echo $idx;
done

配列を使って10回ループ

ARR=`seq -s ' ' 0 9 `

for i in $ARR ; do 
  echo $i
done

配列は、方法が色々ある。

for-each スタイルだとこんな感じ。

ARR=`seq -s ' ' 0 9 `
for i in ${ARR[@]} ; do    echo $i; done
for i in ${ARR[*]} ; do    echo $i; done
for i in $ARR; do    echo $i; done

IFS(区切り文字)や文字展開に注意して使う。

配列の添字(インデックス)を使う方法は、後述する。

配列と添字を組み合わせてループ

配列の添字にアクセスする(多分あんまり使わない。)

## 配列を作る
ARR=(`seq -s ' ' 1000 1009 `)
echo $ARR
echo ${ARR[2]}

## 配列にアクセス
for (( i = 0; i < ${#ARR[*]}; i++ ))  ; do 
  echo "$i => ${ARR[$i]}"
done

配列の配列を作ることがあれば使えるけど、現代では配列の配列をするくらいなら、名前付きインデックスを使うほうが手っ取り早い気がする。

名前付きインデックス(連想配列・Dict)を使う

連想配列も使えると便利です。

declare -A MY_ARRAY
MY_ARRAY[name]=takuya
MY_ARRAY[id]=0001

for key in  ${!MY_ARRAY[*]} ; do 
  echo $key = ${MY_ARRAY[$key]} ;
done

名前付きインデックスの配列は、各言語によって呼び方が異なると思います。

bash の場合は、Associated Array / Associative Array と解説サイトで呼ばれるのをよく見かけたので、assoc array がいいと思います。

まとめ

自分でも時々忘れそうになります。再度まとめ直し。

指定回数トライして、成功したら抜ける。みたいなことを書こうとして詰まった

過去記事

bashの似てて紛らわしいもの (( / $(( の丸括弧 - それマグで!

bashで10回ループ(Bashによる指定回ループとファイル名を001にする) - それマグで!

bashでC言語スタイルforループ - それマグで!

bashの似てて紛らわしいもの (( / $(( の丸括弧 - それマグで!

bashで連想配列(assoc array / hash ) を使う。 - それマグで!

bashの配列のまとめ(定義・代入・参照と取得・ループ) - それマグで!

2022/10/03

for (( i=0; i<0; i++ )) を追加。

2024-09-01

配列を使ったループに付いて追記。Assoc Arrayについて言及。