【Bash】「Bash(バッシュ)」の制御構文
Shell Script / シェルスクリプト
【Bash】
「Bash(バッシュ)」の制御構文
「Bash(バッシュ)」の制御構文とは
制御文は、スクリプトの流れを制御するためのコマンド。
分岐やループなどがあり、制御文を使いこなすことで、繰り返しの作業などが簡単にプログラムできる。
どのプログラミング言語でも制御文があるので、制御文の概念を覚えておけば、細かいところは違えど応用は可能。
制御文の種類
if | 条件を指定して処理を分岐させる。 |
for | 指定した回数分処理を繰り返す。 |
while | 条件に合致している間、処理を繰り返す。 |
case | 指定したパターンに合致する場合、処理を実行する。 |
until | 条件に合致するまで処理を繰り返し実行する。 |
select | 選択した値で処理の実行を分岐する。 |
Back
「if」構文
if構文とは、条件を指定して処理を分岐させる構文で、
良く使用される構文でもある。
書式
if [ 条件文 ]
then
処理プログラムコード
elseif [ 条件文 ]
then
処理プログラムコード
else
処理プログラムコード
fi
注意点
- 絶対に必要な空白があり、「if」の後「[」の後「]」の後の空白を忘れるとエラーになる。
Back
制御文 「if then/else if/endif」
制御文 「if then/else if/endif」は、指定した条件の真偽により処理を分岐するための制御文。
真=true
偽=false
「else if」「else」は、省略可能。
書式
if (条件) then
コマンド
else if (条件) then
コマンド
else
コマンド
endif
条件=数値・定数・式
コマンド=実行する処理内容
Back
制御文 「if then/elif then/else/fi」
制御文 「if then/elif then/else/fi」は、指定した条件の真偽により処理を分岐する制御文。
「elif」「else」は省略可能。
最後の「fi」は、必須。
書式
if [条件]; then
コマンド
elif [条件]; then
コマンド
fi
条件=数値・定数・式
コマンド=実行したい処理内容
Back
「for」制御文
for構文は、指定した回数分処理を繰り返す構文の一つで、
繰り返し処理をするときに便利な構文。
書式
for ((初期値; ループ条件; ループ時の処理));
do
処理内容
done
for 式(代入する変数) in 値のリスト(順番に繰り返す値の入ったリスト);
do
処理内容(実行したい処理)
done
for 変数 in 値のリスト;
do
処理内容
done
記述例
条件式での指定
max=10
for ((i=0; a < $max; a++)); do
echo $a
done
「in」の使用例(値を直接指定)
for a in 0 1 3 5 6 8; do
echo $a
done
値の直接指定は、「in」の後に利用したい値を半角スペースで区切って指定していく。
値は連続している数字でなくてもOK。
「in」の使用例(値を変数指定)
fv="0"
sv="1 3 5 7 9"
for a in $fv $sv; do
echo $a
done
「in」の使用例(値を範囲指定)
for a in {0..9}; do
echo $a
done
for a in $(seq 0 9); do
echo $a
done
値が連続している場合、「{}」で括り、最小値と最大値を指定する。
値が連続している場合、「$(seq 0 9)」という書式で、最小値と最大値を指定する。
推奨は、「$(seq 0 9)」の範囲指定のよう。
「in」の使用例(値を配列で指定)
array=(0 1 2 3 4 5 6 7 8 9)
for a in ${array[@]}; do
echo $a
done
配列で範囲指定するには、「in」の後方に「 ${array[@]}」で指定する。
「in」の使用例(ファイルの内容で指定)
Sample.txt
0
1
2
3
4
5
for a in $(cat Sample.txt); do
echo $a
done
ファイルから範囲を読み込む場合、「in」の後方に「cat」関数でファイル内容を出力する。
「in」の使用例(値にコマンドライン引数を利用する)
for a in "$@"; do
echo $a
done
値にコマンドライン引数を利用する場合、「$@」で指定。
コマンドライン引数とは、一般的には、プログラムを呼び出すときに、プログラム名に続けて、スペースを挟んで記述した値のことを示す。
複数の引数を指定する場合は、スペース区切りで続けて入力する。
Back
制御文「foreach」 - 値リストを順に代入する
指定したリストに格納されている値の順番で繰り返し処理を実行する。
「csh」シェルで利用可能。
書式
#!/bin/csh
foreach 式 値リスト
処理
end
Back
制御文「until/do/done」 - 条件が偽であるとき処理を繰り返す
制御文 「until/do/done」は、指定した条件が「偽(false)」の間、コマンドを繰り返し実行する制御文。
「break」「continue」を使用して、制御を変更することが可能。
書式
until 条件
do
コマンド
done
Back
制御文「switch/case/breaksw/endsw」 - 条件と一致する項目の処理を実行する
制御文 「switch/case/breaksw/endsw」は、式を評価し、その結果に合う処理内容を実行する制御文。
「case」の終わりに、「breaksw」を記述する。
「default」は、「case」に一致しない結果の時に実行される。
書式
switch [判定式]
case 条件1
コマンド1
breaksw
case 条件2
コマンド2
breaksw
case 条件n
コマンドn
breaksw
default:
コマンド
breaksw
endsw
判定式=数字・変数・定数・式
条件=数値・定数
コマンド=条件が一致したときに行う処理内容
Back
制御文「case/esac」 - 条件と一致したコマンドを実行する
条件と一致した処理を実行する。
書式
case 判定式 in
条件1)
処理内容
;;
条件2)
処理内容
;;
条件n)
処理内容
;;
*)
処理内容
;;
esac
判定式 | 式や変数を記述して、条件分岐の判定式を記述する。 |
条件 | 判定式で出た値に合致する数値や定数を記述する。 |
*) | 条件に当てはまらない例外処理を記述する。 |
Back
制御文「expr」 - 式を評価する
指定した式で評価し、結果を標準出力に出力する。
演算機能を行うために使われる。
演算結果を変数に代入するときは、「'」(シングルクォテーション)で囲む必要がある。
式には、「数式」「判別式(testや判定文)」を指定する。
書式
expr 式
\(数式\) | 括弧内の数式は先に優先されて計算される。 |
数値1+数値2 | 加算数式 |
数値1-数値2 | 減算数式 |
数値1\*数値2 | 乗算数式 |
数値1/数値2 | 除算数式 |
数値1%数値2 | 除算の余りを出す数式 |
Back
制御文「test」 - 式を評価する
制御文 「test」は、指定した式の評価結果を真偽で返す。
「真」の返り値=「0」
「偽」の返り値=「1」
書式
test [式]
数値の条件式
引数1 -eq 引数2 | 等しいときに「真」となる。 |
引数1 -lt 引数2 | 引数1が小さいときに「真」となる。 |
引数1 -le 引数2 | 引数1が同じか小さいときに「真」となる。 |
引数1 -gt 引数2 | 引数1が大きいときに「真」となる。 |
引数1 -ge 引数2 | 引数1が同じか大きいときに「真」となる。 |
引数1 -ne 引数2 | 引数が等しくない時に「真」となる。 |
文字列の条件式
引数1 = 引数2 | 引数が等しいときに「真」となる。 |
引数1 != 引数2 | 引数が等しくないときに「真」となる。 |
引数 | 引数が「NULL」(1文字以上)でない時に「真」となる。 |
-n 引数 | 引数が「NULL」(1文字以上)でない時に「真」となる。 |
-z 引数 | 引数が「NULL」(0文字)の時に「真」となる。 |
ファイルの条件式
-b ファイル名 | 指定ファイルが存在して、ブロック型デバイスの時に「真」となる。 |
-c ファイル名 | 指定ファイルが存在して、キャラクタ型デバイスの時に「真」となる。 |
-d ファイル名 | 指定ファイルがディレクトリの時に「真」となる。 |
-e ファイル名 | 指定ファイルが存在しているときに「真」となる。 |
-f ファイル名 | 指定ファイルが存在して、通常ファイルのときに「真」となる。 |
-g ファイル名 | 指定ファイルが存在して、「setgid」ビットが「ON」の時に「真」となる。 |
-h ファイル名 | 指定ファイルが存在して、シンボリックファイルの時に「真」となる。 |
-k ファイル名 | 指定ファイルが存在して、「sticky」ビットが「ON」の時に「真」となる。 |
-p ファイル名 | 指定ファイルが存在して、パイプファイルの時に「真」となる。 |
-r ファイル名 | 指定ファイルが存在して、読み取り可能な時に「真」となる。 |
-s ファイル名 | 指定ファイルが存在して、ファイルサイズが0より大きい時に「真」となる。 |
-u ファイル名 | 指定ファイルが存在して、「setuid」ビットが「ON」の時に「真」となる。 |
-w ファイル名 | 指定ファイルが存在して、書き込み可能な時に「真」となる。 |
-x ファイル名 | 指定ファイルが存在して、実行可能な時に「真」となる。 |
ファイル名1 -nt ファイル名2 | ファイル名1の修正時刻が新しいときに「真」となる。 |
ファイル名1 -ot ファイル名2 | ファイル名1の修正時刻が古いときに「真」となる。 |
ファイル名1 -ef ファイル名2 | ファイル名の両方の実体が、同じファイルのときに「真」となる。 |
条件式を論理演算する条件式
条件1 -a 条件2 | 条件がどちらも「真」の時に「真」となる。 |
条件1 -o 条件2 | 条件のどちあかが「真」の時に「真」となる。 |
!条件 | 条件の否定を判定。条件が「真」の時は「偽」。「偽」の時は「真」となる。 |
(条件) | 括弧内の条件を優先して判定する。 |
Back