本文へスキップ
BecomeCoder

Linuxコマンドコース · 第6章 自動化とシェルスクリプト · レッスン33

シェルスクリプト ― 処理をまとめて自動化する

ブラウザで完結

導入

毎回同じコマンドを何度も打つ代わりに、ファイルにまとめて一発で実行 できるのがシェルスクリプトです。バックアップデプロイ、集計——現場の「決まった手順」はたいていスクリプトになっています。自動化の本丸です。

説明

スクリプトは、コマンドを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つずつ変数に入れて、dodone の中身を繰り返す」構文です。

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 太郎

実際に動かしてみよう

下の端末にコマンドを打って Enter を押すと、その場で結果が返ります。本文で出てきたコマンドを実際に試しながら進めましょう(ファイルを消しても「最初からやり直す」で元に戻ります)。

Linux シェル(シミュレート)

ブラウザ内でコマンドを試せる仮想シェルを読み込みます(本物のLinuxカーネルではなく学習用の再現です)。
スクロールして表示された時点でも自動で読み込まれます。