このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:シェルスクリプトのwhile文

シェルスクリプトのwhile文
while
文は、指定した条件が真である間、繰り返し処理を行うための制御構文です。ループ処理を実現するために頻繁に使用され、条件が満たされなくなるまで特定の処理を繰り返します。

while文の基本構造
while <コマンド>
do
# 繰り返し処理
done
<コマンド>
:while
の後にはコマンドが配置されます。このコマンドの終了ステータスがゼロ(真)である限り、do
とdone
の間に記述された処理が繰り返し実行されます。- 多くの場合、
if
文と同様にtest
コマンドや[ ]
を用いて条件式を記述します。
例:数値の増加を表示するスクリプト(even.sh
)
次に、シェル変数 i
の値が 10 以下である限り、「i
の値を表示してから 2 を足す」という処理を繰り返すスクリプトを作成します。
スクリプトの作成
user01@ubuntu:~$ nano even.sh
even.sh
の内容
#!/bin/bash
i=0
while [ "$i" -le 10 ]
do
echo "$i"
i=$((i + 2))
done
解説
i=0
:変数i
を初期化します。while [ "$i" -le 10 ]
:i
が 10 以下である間、ループを実行します。echo "$i"
:現在のi
の値を表示します。i=$((i + 2))
:i
に 2 を加算します。これは算術式展開を使用しています。
実行権限の付与
user01@ubuntu:~$ chmod +x even.sh
スクリプトの実行
user01@ubuntu:~$ ./even.sh
0
2
4
6
8
10
解説
- スクリプトは
i
の値を 0 から開始し、2 ずつ増加させながら 10 以下の間値を表示します。
算術式展開
bash
では、$(( ))
を使用することで、内部に記述した数式を評価し、その結果を取得することができます。これを算術式展開と呼びます。
- 算術式展開内では、シェル変数に
$
を付ける必要がありません。 - 基本的な算術演算(加算、減算、乗算、除算、剰余、累乗)を行うことができます。
算術式展開の例
user01@ubuntu:~$ i=10
user01@ubuntu:~$ echo $((i + 2)) # i に 2 を足す
12
user01@ubuntu:~$ echo $((i - 3)) # i から 3 を引く
7
user01@ubuntu:~$ echo $((i * 2)) # i に 2 を掛ける
20
user01@ubuntu:~$ echo $((i / 2)) # i を 2 で割る
5
user01@ubuntu:~$ echo $((i % 3)) # i を 3 で割った余り
1
user01@ubuntu:~$ echo $((i ** 2)) # i の 2 乗
100
解説
- 算術式展開を使用することで、外部コマンドを呼び出すことなく効率的に数値計算が可能です。
expr
コマンドを使う必要がないため、スクリプトの実行速度が向上します。
例:算術式展開を使用したカウントダウンスクリプト(countdown.sh
)
次に、算術式展開を使用して 5 から 1 までのカウントダウンを行うスクリプトを作成します。
スクリプトの作成
user01@ubuntu:~$ nano countdown.sh
countdown.sh
の内容
#!/bin/bash
i=5
while [ "$i" -ge 1 ]
do
echo "$i"
i=$((i - 1))
sleep 1 # 1秒待機
done
echo "カウントダウン終了!"
解説
i=5
:変数i
を 5 で初期化します。while [ "$i" -ge 1 ]
:i
が 1 以上である間、ループを実行します。echo "$i"
:現在のi
の値を表示します。i=$((i - 1))
:i
から 1 を減算します。sleep 1
:1 秒間待機します。- ループ終了後に
"カウントダウン終了!"
を表示します。
実行権限の付与
user01@ubuntu:~$ chmod +x countdown.sh
スクリプトの実行
user01@ubuntu:~$ ./countdown.sh
5
4
3
2
1
カウントダウン終了!
解説
- スクリプトは 5 から 1 までの数字を 1 秒間隔で表示し、最後にメッセージを表示します。
sleep 1
コマンドにより、カウントダウンが 1 秒ごとに進行します。
作成したシェルスクリプトの削除
user01@ubuntu:~$ rm even.sh countdown.sh
まとめ
while
文は、指定した条件が真である間、繰り返し処理を行う制御構文です。- 算術式展開(
$(( ))
)を使用することで、効率的に数値計算を行うことができます。
・外部コマンドを使用しないため、スクリプトの実行速度が向上します。
・シェル変数を数値として扱う場合に非常に便利です。 - 実用例として、ループ内で変数の値を増減させる処理が挙げられます。
bash
スクリプトでは、while
文と算術式展開を組み合わせて、さまざまな繰り返し処理を効率的に実装できます。
これらの知識を活用して、より高度なシェルスクリプトを作成してみてください。