導入
毎回同じコマンドを何度も打つ代わりに、ファイルにまとめて一発で実行 できるのがシェルスクリプトです。バックアップ、デプロイ、集計——現場の「決まった手順」はたいていスクリプトになっています。自動化の本丸です。
説明
スクリプトは、コマンドを1行ずつ並べたただのテキストファイルです。scripts の中を見てみましょう。
cat scripts/backup.sh
1行目の #!/bin/sh は シバン(shebang) と呼ばれ、「このファイルを sh で動かす」という宣言です。実行するには sh ファイル と打つか、実行権限(第4章の chmod +x)を付けて ./ファイル と打ちます。
sh scripts/backup.sh
スクリプトは 引数 を受け取れます。実行時に渡した値は、スクリプトの中で $1(1つ目)・$2(2つ目)…、個数は $# で参照できます。scripts/greet.sh で試しましょう。
cat scripts/greet.sh
sh scripts/greet.sh 太郎
繰り返しには for ループ を使います。「並べた値を1つずつ変数に入れて、do 〜 done の中身を繰り返す」構文です。
flowchart TD
A["for name in 佐藤 鈴木 高橋"] --> B{"残りはある?"}
B -->|"あり"| C["name に次の値を入れる"] --> D["do 〜 done の中を実行"] --> B
B -->|"なし"| E["ループ終了"]
for name in 佐藤 鈴木 高橋; do echo $name さん; done
条件で枝分かれする
if、条件が続くあいだ回すwhileもあります(このシミュレータでは単一行のforまでを実際に動かせます)。「引数を受け取り、forで回し、結果をファイルへ」——この3つが書けると、実務のスクリプトはぐっと現実的になります。
やってみよう
cat scripts/greet.sh で中身($# と $1 を使っている)を眺めてから、sh scripts/greet.sh 太郎 を実行し、引数の個数と名前が反映されることを確かめましょう。for name in 佐藤 鈴木 高橋; do echo $name さん; done で、3つの値が順に処理される様子も見てください。
演習
scripts/greet.sh を、引数に 太郎 を渡して実行してください。
ヒント1を見る
スクリプトの実行は sh ファイル、そのあとにスペース区切りで引数を書きます。
ヒント2を見る
sh scripts/greet.sh 太郎