【Shell】for文の使い方:単語リスト・配列内ループ、ファイル操作、continue – break文

■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
タイトルとURLをコピーしました