シェルプログラミング - for
$ bash -version | head -n 1
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
for文の記載方法でも「; do」を使って短くできます。自分が使っていなかっただけで昔からできたようです。
任意の回数の繰り返し - for
「((」と「))」になっているので注意してください。
for ((i=0; i < 5; i++))
do
echo ${i}
done
----- OUTPUT -----
0
1
2
3
4
任意の回数の繰り返し - for in
for in を使って任意の回数を繰り返す。
for i in `seq 0 5`
do
echo $i;
done
----- OUTPUT -----
1
2
3
4
5
{1..5} の記述は、「1 2 3 4 5」に置き換わります
for i in {1..5}
do
echo ${i};
done
----- OUTPUT -----
1
2
3
4
5
配列の繰り返し
配列宣言時は、要素を半角スペースで区切ります。
「AAA BBB CCC」のようにします。
for VAL in AAA BBB CCC
do
echo ${VAL}
done
----- OUTPUT -----
AAA
BBB
CCC
for VAL in AAA BBB CCC; do
echo ${VAL}
done
----- OUTPUT -----
AAA
BBB
CCC
配列の中身を処理する場合は以下のようになります。
LIST=("AAA" "BBB" "CCC")
echo ${LIST[@]}
for VAL in ${LIST[@]}
do
echo ${VAL}
done
----- OUTPUT -----
AAA BBB CCC
AAA
BBB
CCC
【NG例】最初は以下のようにして?となりました…
LIST=("AAA" "BBB" "CCC")
echo ${LIST} # これだと配列の先頭しか表示されない
for VAL in ${LIST}
do
echo ${VAL} # これだと配列の先頭しか表示されない
done
配列の中身を処理する場合で、for inを使わない方法もあります。
以下は同じ動作になります。
スピードなどでどちらが有利なのかは知りません。(←だめじゃん…)
LIST=("AAA" "BBB" "CCC")
echo ${LIST[@]}
for VAL in ${LIST[@]}
do
echo ${VAL}
done
echo "LIST NUM="${#LIST[@]} # 配列の要素数が取得できます。
for (( i = 0; i < ${#LIST[@]}; ++i ))
do
echo ${LIST[$i]}
done
ファイルを読込んで1行づつ処理を行う - ※AWKを使っても制限はあり
配列ではなくファイルを読込み処理する場合は、AWKを使えばできますが、whileを使うほうが簡単ですのでそっちを使った方がいいです。
data.txtは以下のようになります。1レコードに空白などあると以下のコードだとダメです。
AAA.txt
BBB.txt
CCC.txt
# 最終行に空行が存在しなくても大丈夫
FILE_NAME="./data.txt"
FILE_LIST=`awk '{print $0}' < ${FILE_NAME}` # AWKで1行分読み込む
echo ${FILE_LIST} # 最後の行の値しか表示しないので紛らわしい。全部表示するにはどうすればいいのか?
for VAL in ${FILE_LIST}
do
echo ${VAL}
done
----- OUTPUT -----
CCC.txt
AAA.txt
BBB.txt
CCC.txt
空白があった場合
data.txt
AAA.txt 1
BBB.txt 2
CCC.txt 3
以下のように空白区切りで取り出されてしまいます。
CCC.txt 3
AAA.txt
1
BBB.txt
2
CCC.txt
3
この記事が気に入ったらサポートをしてみませんか?