この記事では、《シェルスクリプトの基本文法》について、
業務を通して学習した内容をまとめています。
- 『変数』の使い方
- 『条件分岐』と『繰り返し処理』の使い方
- 『関数』の使い方
こういった内容についてまとめています。
※本記事は、自分で学習したことのまとめ用として書いています。
尚、解説で誤った点があれば、スローして頂ければ喜んでキャッチしますのでお願い致します。
--- 【シェルスクリプト入門】 ---
変数(文字列)
①: 変数の代入
--- 例題 ---
# !/bin/bash
val="Hello World!!"
※=
の両端に半角スペースを入れないよう注意
②: 変数の展開
--- 例題 ---
# !/bin/bash
val="Hello World!!"
echo "${val}"
※""
だけでは変数展開されないので注意
--- 実行結果 ---
$ . sample.sh
Hello World!!
変数(数値)
①: 変数の代入
--- 例題 ---
# !/bin/bash
x=10
echo $x
echo $x+1
※=
の両端に半角スペースを入れないよう注意
--- 実行結果 ---
$ . sample.sh
10
10+1
※計算されていないことに注意
計算するには…
# !/bin/bash
x=10
echo $x
echo $x+1
echo `expr $x + 1`
上記のように・・・
『計算結果』や『コマンドの出力結果』を変数に設定した場合は…
__expr
と``(バッククォート)__を使用する。
※半角スペースを忘れないよう注意
--- 実行結果 ---
$ . sample.sh
10
10+1
11
四則演算
--- 例題 ---
# !/bin/bash
x=10
echo `expr $x + 1` # 足し算
echo `expr $x - 1` # 引き算
echo `expr $x \* 2` # 掛け算
echo `expr $x / 2` # 割り算
--- 実行結果 ---
$ . sample.sh
11
9
20
5
条件分岐|if文、for文
- if文
- case文
条件分岐①: if文
--- 例題 ---
# !/bin/sh
str="hello"
if [ ${str} = "hello" ]; then
echo "${str}"
echo "Hello!!!"
elif [ ${str} = "world" ]; then
echo "${str}"
echo "World!!!"
else
echo "Hello World!!!"
fi
- if文は
[]
内に条件を入れ、then
をつける - 複数の条件を扱うときは
elif
でつなぎ、if同様then
をつける -
else
の後は何も書かず、条件分岐の終わりはfi
で閉じる
--- 実行結果 ---
$ . sample.sh
hello
Hello!!!
↓ if文のオプショについて詳しく知りたい方は、下記を参照してみて下さい。
【おまけ】 シェルスクリプト内で実行したコマンドが正常終了したかを判定
--- 例題 ---
# !/bin/bash
. dummy.sh # dummy.shを実行
exit_flag=$? # 実行結果を変数に格納
if [ $exit_flag = 0 ]; then
echo $exit_flag
echo "dummy.shは正常終了"
else
echo $exit_flag
echo "dummy.shは異常終了"
fi
コマンド実行後に$?
によって、直前に実行したコマンドのステータスコードが取得できる。
- 成功(正常終了): 0
- 失敗(異常終了): 0以外全て(1 〜 255)
--- 実行結果(正常終了) ---
$ . sample.sh
0
dummy.shは正常終了
条件分岐②: case文
--- 例題 ---
# !/bin/sh
str="hello"
case ${str} in
"hello") echo "Hello" ;;
"world") echo "World" ;;
*) echo "hello World!!" ;;
esac
- caseの後に判定したい変数などを指定し、その後に
条件)
といった形で記述する -
*)
は多くのプログラミング言語におけるswitch~case文のdefault
に該当する - 末尾に
;;
を付ける
--- 実行結果 ---
$ . sample.sh
Hello
繰り返し処理(ループ)|for文、while文
- for文
- while文
繰り返し処理①: for文
--- 例題①: 複数の文字列 ---
# !/bin/sh
for str in hello world aaa
do
echo "${str}"
done
--- 実行結果 ---
$ . sample.sh
hello
world
aaa
--- 例題②: 配列 ---
# !/bin/sh
array=(1 2 3 4 5)
for i in ${array[@]}
do
echo $i
done
--- 実行結果 ---
$ . sample.sh
1
2
3
4
5
--- 例題③: seq ---
seq 第一引数 第二引数
と記述することで・・・
第一引数以上〜第二引数以下の整数を順番にループしてくれる。
for文を使うなら、
seqコマンド
は覚えておきたい
# !/bin/sh
for i in `seq 1 5`
do
echo $i
done
--- 実行結果 ---
$ . sample.sh
1
2
3
4
5
繰り返し処理②: while文
--- 例題 ---
# !/bin/sh
i=0
while [ $i -lt 10 ]
do
echo $i
i=`expr $i + 1 `
done
オプション | 説明 |
---|---|
num1 -lt num2 | num1 が num2 より小さい__なら__真 |
--- 実行結果 ---
$ . sample.sh
0
1
2
3
4
5
6
7
8
9
関数 【3パターン】
- 基本系
- function省略系
- 引数を渡す
パターン①: 基本系
--- 例題 ---
# !/bin/bash
function hello() {
echo "hello"
}
hello # 関数呼び出し
--- 実行結果 ---
$ ./sample.sh
hello
パターン②: function省略系
--- 例題 ---
# !/bin/bash
hello() {
echo "hello"
}
hello # 関数呼び出し
--- 実行結果 ---
$ . sample.sh
hello
パターン③: 引数を渡す
--- 例題 ---
# !/bin/bash
hello() {
echo "hello $1 and $2"
}
hello John Alex # 関数呼び出し
--- 実行結果 ---
$ . sample.sh
hello John and Alex↲
【おまけ】 現在の日付・時刻を取得する
今日の日付と現在の時刻が、2020年 3月4日 22時00分00秒
だった場合
--- 例題 ---
# !/bin/bash
today1=`date "+%Y%m%d%H%M%S"`
today2=`date "+%Y_%m%d_%H%M%S"`
echo "$today1"
echo "$today2"
--- 実行結果 ---
$ . sample.sh
20200305215333
2020_0305_215333
まとめ・感想
これからしばらく『シェルスクリプト』を書きそうなので、しっかり基礎を理解していきたい。
今後は…
if文(test文)のオプション
をまとめる予定。