■for文の書き方
for文は繰り返しの処理を行うときに使用する構文である。
例えば、1から9を表示する処理について、for文を使用せず、一つ一つ実行すると、以下のように書く必要がある。
echo 1
echo 2
echo 3
echo 4
echo 5
echo 6
echo 7
echo 8
echo 9
1から9までならば、そこまで苦なく書けるが、これが1から100、1000、10000と増えていくと、とてもじゃないが書いていくのが苦痛となる。
そこでfor文を使用することで、同じことを繰り返す処理については、簡略化することができる。
for文の基本的な書き方は以下の通りである。
#!/bin/bash
for 変数 in 繰り返し対象
do
繰り返す処理
done
以下、for文の具体的な使用例を記載していく。
■単語リスト内のループ処理
inの後ろに単語を列挙していくと、列挙した順番に変数に格納される。
▼サンプルコード
#!/bin/bash
# 単語を繰り返す
for i in aaa bbb ccc
do
echo $i
done
▼実行結果
aaa
bbb
ccc
■配列内のループ処理
配列に格納した値を1つずつ変数に格納し、ループ処理を実行する。
▼サンプルコード
#!/bin/bash
# 配列をセット
sample_array=(a b c d e)
# 配列内を繰り返す。
for i in "${sample_array[@]}"
do
echo $i
done
▼実行結果
a
b
c
d
e
■ディレクトリ内のファイルをループ処理(バックアップ作成)
ディレクトリ名のファイルについてもループ処理を行うことができる。
★バックアップを作成する時などに便利
▼仕様イメージ
/work/tmpディレクトリ内のテキストファイルについてループ処理を実行し、バックアップを作成する。
▼サンプルコード
#!/bin/bash
# カレントディレクトリ移動
cd /work/tmp
echo "バックアップ作成前"
# 1行ずつ表示
ls -1 /work/tmp
# ディレクトリ内のテキストファイルを繰り返す
for txt_file in *.txt
do
# バックアップを作成
cp -p "$txt_file" "${txt_file}_bk"
done
echo "バックアップ作成後"
# 1行ずつ表示
ls -1 /work/tmp
▼実行結果
バックアップ作成前
hoge1.txt
hoge2.txt
hoge3.txt
バックアップ作成後
hoge1.txt
hoge1.txt_bk
hoge2.txt
hoge2.txt_bk
hoge3.txt
hoge3.txt_bk
■continueとbreak文
ループ処理を行なっていく中で、ループ処理制御として、continueとbreakを使用することができる。
continueが実行されると、それ以降の処理を省略して、次のループ処理へ移行する。
breakが実行されると、その時点でループ処理を抜け出す。
▼イメージ
▼サンプルコード
#!/bin/bash
# 1から9まで処理実行
for i in {1..9}
do
# 4のときはスキップ
if [ $i -eq 4 ]; then
continue
# 7のときはループ終了
elif [ $i -eq 7 ]; then
break
fi
echo $i
done
▼実行結果
1
2
3
5
6