シェルスクリプトを学習してみよう
以前に書いた記事では、どちらかと言うとcronに焦点を当てたので、今回はシェルスクリプト(bash)を深掘りして学習していきたいと思います。
[1] 基礎
1.1_スクリプトファイル拡張子
「 .sh 」としてファイルを作成
1.2_スクリプトファイル記述ルール
✅ファイルの冒頭に シバン ( #! から始まる1行目 ) を記述
今回は bashシェルスクリプトを作成するので、ファイルの一行目(スクリプトの先頭)に「 #!/bin/bash 」とパスを記述します。
✅変数を用いて記述が可能
・変数を用いて、シェルスクリプト実行時の引数などを参照する記述が可能
・引数を表す変数が存在
1.3_シェルスクリプトの実行
作成したスクリプトファイルに実行命令(コマンド)を与えることで走る
1.4_実行結果の戻り値
✅(スクリプト実行コマンドに限らず)コマンド実行すると、終了時にシェルに対して戻り値を返す
⇓
※シェルスクリプトでは、「最後に実行されたコマンド」の終了ステータスが返される戻り値となる※
✅終了ステータス(exit status)の値
├─ 正常終了した場合:0
└─ 正常終了しなかった場合:0以外の値
✅戻り値は、「$?」に格納される
※コマンドを実行するたびに値が初期化され、新たな値が格納される※
✅exitコマンド
スクリプトファイル内に記述し、引数に数値を指定すると、その数値が終了ステータスになる
[2] 制御構造
条件を分岐させたり、繰り返し処理を実行することで、複雑なプログラムの作成を可能にする
2.1_条件分岐
2.2_繰り返し処理
[3] デバッグ【debug】
・バグを取り除いて適切に修正すること
・オプション付きbashコマンドを使用
bash コマンド
----------------- <サンプルスクリプトファイル> -----------------
[notedemo03@CENT03 ~]$ cat docker.sh
#!bin/bash
docker images && docker ps -a && docker ps
-----------------------------------------------------------
[notedemo03@CENT03 ~]$ bash docker.sh
REPOSITORY TAG IMAGE ID CREATED SIZE
python latest 18f3593da4a5 28 hours ago 886MB
ubuntu xenial-20200903 c871c45b1573 4 weeks ago 127MB
amazonlinux latest ba2cc467a2bc 2 months ago 163MB
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
091d81bf7368 amazonlinux:latest "/bin/bash" About a minute ago Exited (137) 11 seconds ago al2test
aaca4e924a96 python:latest "/bin/bash" 3 minutes ago Exited (0) 38 seconds ago pythsontest
207cb9c04405 ubuntu:xenial-20200903 "/bin/bash" 3 weeks ago Up 9 days ubuntudemo
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
207cb9c04405 ubuntu:xenial-20200903 "/bin/bash" 3 weeks ago Up 9 days ubuntudemo
✅オプション:-v
シェルスクリプト内で実行されるコマンドが、標準エラー出力に出力される
[notedemo03@CENT03 ~]$ bash -v docker.sh
#!bin/bash
docker images && docker ps -a && docker ps
REPOSITORY TAG IMAGE ID CREATED SIZE
python latest 18f3593da4a5 28 hours ago 886MB
ubuntu xenial-20200903 c871c45b1573 4 weeks ago 127MB
amazonlinux latest ba2cc467a2bc 2 months ago 163MB
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
091d81bf7368 amazonlinux:latest "/bin/bash" About a minute ago Exited (137) 34 seconds ago al2test
aaca4e924a96 python:latest "/bin/bash" 3 minutes ago Exited (0) About a minute ago pythsontest
207cb9c04405 ubuntu:xenial-20200903 "/bin/bash" 3 weeks ago Up 9 days ubuntudemo
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
207cb9c04405 ubuntu:xenial-20200903 "/bin/bash" 3 weeks ago Up 9 days ubuntudemo
✅オプション:-x
・シェルスクリプト内で実行されるコマンドが、標準エラー出力に出力される
・実行されたコマンドは、行頭に「+」付きで表示される
[notedemo03@CENT03 ~]$ bash -x docker.sh
+ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python latest 18f3593da4a5 28 hours ago 886MB
ubuntu xenial-20200903 c871c45b1573 4 weeks ago 127MB
amazonlinux latest ba2cc467a2bc 2 months ago 163MB
+ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
091d81bf7368 amazonlinux:latest "/bin/bash" About a minute ago Exited (137) 42 seconds ago al2test
aaca4e924a96 python:latest "/bin/bash" 3 minutes ago Exited (0) About a minute ago pythsontest
207cb9c04405 ubuntu:xenial-20200903 "/bin/bash" 3 weeks ago Up 9 days ubuntudemo
+ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
207cb9c04405 ubuntu:xenial-20200903 "/bin/bash" 3 weeks ago Up 9 days ubuntudemo
さいごに
今回の記事では、bashシェルスクリプトをどのように作成するか、どうやって実行するかを紹介しましたが、神髄は「如何に業務に役に立つスクリプトを作成するか」だと思います。
AWS CLI コマンドなどを組み合わせても面白いことができそうですね。
最後まで読んでいただき誠にありがとうございます。少しでも何かの参考になれば幸いです。
もしこの記事が何かの参考になったもしくは面白かったという方は、応援していただけると大変嬉しいです😊 これからもよろしくお願いします。