第 3 章
Bashスクリプトの作成と自動化の基本
コマンドラインで実行する一連の操作をファイルに記述して実行可能にしたものを シェルスクリプト と呼びます。その中でも、最も広く利用されているシェル「Bash」向けに書かれたスクリプト(Bashスクリプト)は、サーバー構築やタスクの自動化で強力なツールになります。
1. スクリプトの基本構造とシバン
シェルスクリプトを作成する際は、ファイルの1行目に必ず シバン (Shebang) と呼ばれる、どのインタプリタでスクリプトを実行するかを示す特殊な行を記述します。
#!/bin/bash
# これはコメントです。
echo "Hello, Bash scripting!"
実行方法
シェルスクリプトを実行できるようにするには、ファイルに 実行権限 (x) を追加し、ファイルのパスを指定して実行します。
# 実行権限を付与
chmod +x hello.sh
# 現在のディレクトリにあるスクリプトを実行
./hello.sh
2. 変数とコマンド置換
変数の定義と参照
変数を定義する際は、イコール = の前後にスペースを空けてはいけません。変数を参照する際は、名前の前に $ を付けます。
#!/bin/bash
NAME="Handi"
# ${NAME} のように波括弧で囲むと、変数名と文字列の境界が明確になります
echo "Hello, ${NAME}!"
コマンド置換
コマンドの実行結果を変数に代入したい場合は、$(コマンド) という構文(コマンド置換)を使用します。
#!/bin/bash
# 現在の日付を取得して変数に格納
CURRENT_DATE=$(date "+%Y-%m-%d")
echo "本日の日付: ${CURRENT_DATE}"
3. 条件分岐(if)と条件式
if 文の基本
Bashの条件式は [ ... ](大括弧)で囲みます。この大括弧の内側には、必ず スペースを空ける 必要があります。
#!/bin/bash
FILE="config.json"
# -f は「ファイルが存在し、かつ通常のファイルであるか」を評価する演算子
if [ -f "${FILE}" ]; then
echo "${FILE} は存在します。"
else
echo "${FILE} は存在しません。"
fi
代表的な条件演算子
| 演算子 | 意味 |
|---|---|
-f file |
ファイルが存在し、かつ通常ファイルであれば真 |
-d dir |
ディレクトリが存在すれば真 |
-z str |
文字列の長さが 0 であれば真(空文字チェック) |
$A = $B |
文字列 A と B が等しければ真 |
$A -eq $B |
数値 A と B が等しければ真 (Equal) |
$A -lt $B |
数値 A が B より小さければ真 (Less Than) |
4. 引数の処理とループ
特殊な変数(位置パラメータ)
スクリプト実行時に渡された引数は、$1, $2 などの変数で受け取ることができます。
$0: スクリプト自身のファイル名$1,$2, ...: 第1引数、第2引数...$#: 引数の総数$@: すべての引数リスト
ループ(for)
指定したリストの各要素に対して処理を繰り返します。
#!/bin/bash
# 引数で渡されたすべてのファイルをループ処理
for file in "$@"; do
echo "処理対象ファイル: ${file}"
done
まとめ
- スクリプトの1行目には必ず
#!/bin/bash(シバン) を書く。 - 変数は
NAME="value"のように代入し、${NAME}で参照する。 - 条件分岐の
[ ... ]は前後にスペースを必ず入れる。 $1,$@を使用して実行時の引数をパースし、処理の自動化に応用する。