数列 \( a_n = n + 2 \) の最初の4項を表示するスクリプト
01 #!/bin/bash 02 n=0 03 while [ $n -lt 4 ]; do 04 n=$(( n + 1 )) 05 a=$(( n + 2 )) 06 echo $a 07 done
実行するスクリプトには行番号など付いていないが,ここに示したものは先頭に行番号を書いた.
スクリプトの01行目はシェルスクリプトのおまじない. 本体は02行目以降である.
コードは前から順番に実行されるので,前から順番に見ていく.
処理01:02行目
変数 n という容れ物に,0 という数字を入れる.
完了したら次の03行目に移動.
処理02:03行目
条件分岐.
変数 n の値が 4 よりも小さいなら,それに続く do と done の間を実行する.
変数 n の値が 4 以上なら,done の次の行に移動する.
ここでは,変数 n に 0 が入っている(処理01).
変数 n の値が 4 より小さいので,do と done の間を実行するべく,04行目に移動する.
処理03:04行目
変数 n に n + 1 を入れろ,という命令(シェルスクリプトにおいて,= は右辺の値を左辺に代入する,である).
この行に来たとき,変数 n には 0 が入っている(処理01で 0 を入れたあと変更がない)ので,変数 n に 0 + 1 の結果である 1 を入れる.
完了したら次の05行目に移動する.
処理04:05行目
変数 a に n + 2 を入れろ,という命令.
この行に来たとき,変数 n には 1 が入っている(処理03)ので,変数 a に 1 + 2 の結果である 3 を入れる.
完了したら次の06行目に移動する.
処理05:06行目
変数 a の中身を表示しろ,という命令.
この行に来たとき,変数 a には 3 が入っている(処理04)ので,3 が出力される.
完了したら次の07行目に移動.
処理06:07行目
done は条件が満足されたときに実行される一連の処理の終わりを表す.
一連の処理が終わったので,始まり(03行目)に戻る.
処理07:03行目
この行に戻ってきたとき,変数 n には 1 が入っている(処理03で 1 を入れたあと変更がない).
変数 n の値が 4 より小さいので,do と done の間を実行するべく,04行目に移動する.
処理08:04行目
変数 n には 1 が入っている(処理03で 1 を入れたあと変更がない)ので,変数 n に 1 + 1 の結果である 2 を入れる.
完了したら次の05行目に移動する.
処理09:05行目
変数 n には 2 が入っている(処理08)ので,変数 a に 2 + 2 の結果である 4 を入れる.
完了したら次の06行目に移動する.
処理10:06行目
変数 a には 4 が入っている(処理09)ので,4 が出力される.
完了したら次の07行目に移動.
処理11:07行目
始まり(03行目)に戻る.
処理12:03行目
変数 n には 2 が入っている(処理08で 2 を入れたあと変更がない).
変数 n の値が 4 より小さいので,do と done の間を実行するべく,04行目に移動する.
処理13:04行目
変数 n には 2 が入っている(処理08で 2 を入れたあと変更がない)ので,変数 n に 2 + 1 の結果である 3 を入れる.
完了したら次の05行目に移動する.
処理14:05行目
変数 n には 3 が入っている(処理13)ので,変数 a に 3 + 2 の結果である 5 を入れる.
完了したら次の06行目に移動する.
処理15:06行目
変数 a には 5 が入っている(処理14)ので,5 が出力される.
完了したら次の07行目に移動.
処理16:07行目
始まり(03行目)に戻る.
処理17:03行目
変数 n には 3 が入っている(処理13で 3 を入れたあと変更がない).
変数 n の値が 4 より小さいので,do と done の間を実行するべく,04行目に移動する.
処理18:04行目
変数 n には 3 が入っている(処理13で 3 を入れたあと変更がない)ので,変数 n に 3 + 1 の結果である 4 を入れる.
完了したら次の05行目に移動する.
処理19:05行目
変数 n には 4 が入っている(処理18)ので,変数 a に 4 + 2 の結果である 6 を入れる.
完了したら次の06行目に移動する.
処理20:06行目
変数 a には 6 が入っている(処理19)ので,6 が出力される.
完了したら次の07行目に移動.
処理21:07行目
始まり(03行目)に戻る.
処理22:03行目
変数 n には 4 が入っている(処理18で 4 を入れたあと変更がない).
変数 n の値が 4 以上なので,done の次の行である08行目に移動する.
処理23:08行目
08行目は存在しないので,終了する.