シェルスクリプトのループでfor文を使用しますが、順に入れる文字列が複雑なので配列で指定したい事はないでしょうか?
そういった場合の処理のやり方を、実践していきます。
windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。
シェルスクリプトのfor文のループ処理を配列で行う方法
シェルスクリプトでループの処理を配列で行うには、以下のプログラミングを行います。
for 変数 in ${配列名[@]}
do
繰り返す処理
done
これでループ処理を配列で処理できます。配列に入っている順番に要素が変数に入り処理されます。
配列の宣言と要素の格納方法
配列の宣言方法
では配列の宣言を行います。
宣言方法 | 意味 |
---|---|
declare -a 変数 | 配列を表す |
declare -ar 変数 | 読み取り専用の配列を表す |
これで指定した変数は配列となります。※特に指定しなくても良いです。
配列の要素の格納方法
では配列に要素を格納していきます。
array=(1 2 3 4 5 6 7 8 9)
配列名に「=」をつけてカッコの中に要素を詰めていきます。要素と要素はスペースで区切ります。
この配列をシェルスクリプトのループに用いると、1から順に9まで変数に入り繰り返されます。
配列の追加や要素数の取得方法
下のシェルスクリプトで配列のコピーも可能です。
新配列名=("${配列[@]}")
下のシェルスクリプトで配列の前に要素を追加できます。
新配列名=(aaa bbb "${配列[@]}")
下のシェルスクリプトで配列の後ろに要素を追加できます。
新配列名=("${配列[@]}" aaa bbb)
今の配列に簡単に追加する事も可能です。
配列名+=(aaa bbb)
下のシェルスクリプトでは配列の要素数を数えます。
${#配列[@]}
全ての配列を表す「${配列[@]}」の中に「#」を入れる事で要素数の数を数えてくれます。
以下のシェルスクリプトでは配列に入っている要素数だけ繰り返す事ができます。
array=(3 4 5)
for ((i=1; i<=${#array[@]}; i++))
do
echo $i回繰り
done
このシェルスクリプトを実行してみます。
配列に格納されている数だけ繰り返されました!