見出し画像

シェルスクリプトを学習してみよう

以前に書いた記事では、どちらかと言うと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 コマンドなどを組み合わせても面白いことができそうですね。

最後まで読んでいただき誠にありがとうございます。少しでも何かの参考になれば幸いです。

もしこの記事が何かの参考になったもしくは面白かったという方は、応援していただけると大変嬉しいです😊 これからもよろしくお願いします。