Linuxでは、繰り返し行う作業を自動化できる「シェルスクリプト」が非常に便利です。
この記事では、Bashスクリプトの基本構造、制御構文、引数処理、デバッグ方法などを体系的に解説します。
📝 シェルスクリプトとは?
シェルスクリプトは、Linuxのコマンドをまとめて自動実行するためのスクリプトファイル(テキストファイル)です。拡張子は .sh にするのが一般的です。
コマンドをたくさん実行したい時や、繰り返し実行したい時、自動化したい時などに作るととても便利です。
🔰 スクリプトの基本構造
最初に「シバン(shebang) 」というものを指定します。
シバンの次の行からは好きな処理を記入するだけです。

シバンはシェルスクリプトの冒頭で出てくるこれ:#!/bin/bash
これは「このスクリプトは /bin/bash インタプリタで実行してください」という意味です。bash がスクリプトを1行ずつ読みながら動かしてくれます。
インタプリタ(interpreter)とは?
プログラムのコードを1行ずつ読み取り、その場で実行する仕組みのことです。
🔍 インタプリタの意味
- プログラムを 事前に機械語に翻訳しない
- 実行時に 1行ずつ読み取ってその場で処理する
- 代表例:
bash、python、ruby、perl
⚙ スクリプトの作成と実行手順
vi test.sh
chmod +x test.sh
| 実行方法 | 説明 | 実行例 |
|---|---|---|
./test.sh | 推奨。現在のシェルを使わず、#!/bin/bash などで指定されたシェルで実行される。 | ![]() |
bash test.sh | Bashで強制的に実行。#!/bin/sh などに関係なくBashで動かしたいときに使う。 | ![]() |
sh test.sh | POSIX互換の sh で実行(UbuntuならDash)。簡易的な実行で動作確認にも。 | ![]() |
. test.sh または source test.sh | 現在のシェルに設定を反映させる(=同じプロセスで実行)主に .bashrc に設定を読み込むときなどに使用。変数や関数の定義が残る。 | ![]() |
📦 引数の扱い
「引数(arguments)」とは、コマンドに追加で渡す情報のことです。コマンドが「何をするか」だけでなく、「何に対して」「どうやって」行うかを指定するために使われます。
| 記号 | 意味 |
|---|---|
$0 | スクリプト名 |
$1~$n | 各引数 |
$# | 引数の数 |
$@ | 全引数(個別展開) |
$* | 全引数(1つの文字列) |
shift | 引数をずらす($2→$1) |
これだけだと分かりずらいと思うので、実行例を見てみましょう。
引数の実行例

変数について
シェルスクリプトにおける変数は、値を一時的に保存するための名前付きの領域です。
🔤 変数の使い方
✅ 代入
name="Taro"
※ = の前後にスペースを入れないこと!
✅ 参照(使うとき)
echo "$name"
📌 注意点
- 文字列や数値、どちらも扱えます。
- 変数を参照する際は
$を付ける(例:$name)。 - 文字列にスペースがあるときは
"で囲む。
✨ 例:

🟰 出力例:

💬 よく使う構文
条件分岐:if, case
Linuxシェルスクリプトにおける条件分岐の基本は if と case 文です。処理を状況に応じて変えるために使います。
if 文:条件によって処理を分ける
-基本文法-if [ 条件 ]; then
処理1
elif [ 別の条件 ]; then
処理2
else
処理3
fi
✅ 例:

・$1(引数の一つ目)がstartだったら
Starting…
と出力する
・$1(引数の一つ目)がstopだったら
Stopping…
と出力する
・その他だったら
Usage:$0(スクリプトのファイル名){start|stop}
と出力する

🎯 case 文:複数の値に応じて処理を分ける
-基本文法-case 値 in
パターン1)
処理1
;;
パターン2)
処理2
;;
*)
それ以外の処理
;;
esac
✅ 例:

・$1(引数の一つ目)がstartだったら
Starting…
と出力する
・$1(引数の一つ目)がstopだったら
Stopping…
と出力する
・その他だったら
Usage:$0(スクリプトのファイル名){start|stop}
と出力する
実行結果は上記if文と同様
✨ if, case違いまとめ
| 文法 | 用途 | 特徴 |
|---|---|---|
if | 数値や文字列の条件 | 柔軟で細かい条件判定に向く |
case | 文字列の一致判定 | 選択肢が多い場合に見やすい |
ループ処理:for, while
シェルスクリプトにおけるループ処理は、繰り返し処理を実行するために for と while を使います。
🔁 for 文:あらかじめ決まった回数だけ繰り返す
-基本文法-for 変数 in 値1 値2 値3; do
処理
done
✅ 例:
for name in Alice Bob Charlie; do
echo "Hello, $name"
done
実行結果

🔁 while 文:条件が真である限り繰り返す
-基本文法-while [ 条件 ]; do
処理
done
✅ 例:
count=1
while [ $count -le 3 ]; do
echo "カウント: $count"
count=$((count + 1))
done
👉 count が 3 以下の間、繰り返し実行されます。
実行結果

✨ for, while違いまとめ
| 文法 | 用途 | 特徴 |
|---|---|---|
for | 決まった範囲やリストを順に処理 | 回数が決まっている時に便利 |
while | 条件に基づく繰り返し | 条件が変化するまで続ける |
関数の定義
シェルスクリプトにおける関数は、処理をまとめて再利用できる仕組みです。
設定した関数名を入力するだけで、設定したコマンドを繰り返し使えるので、便利です。
🛠 関数の定義方法
function 関数名 {
コマンド
}
または
関数名() {
コマンド
}
✏️ 例:
greet() {
echo "こんにちは!"
}
greet # ← 関数の実行
🟰 出力:
こんにちは!
💡 応用:引数付き関数
関数に引数を渡すと $1, $2, … で取得できます。
greet() {
echo "こんにちは、$1さん!"
}
greet "Taro"
🟰 出力:
こんにちは、Taroさん!
🧪 戻り値と終了処理
戻り値と終了処理(exitステータス)は、コマンドや関数の「成功 or 失敗」を伝えるために使います。
✅ 戻り値(exitステータス)とは?
- 直前のコマンドの終了ステータスは、
$?で確認できます。 - 成功:0, 失敗:0以外

🛠 関数の戻り値(終了ステータス)
関数内で return 数値 を使うと、その値が関数の戻り値になります(0~255の整数)。
check_file() {
[ -f "$1" ] && return 0 || return 1
}
check_file "/etc/passwd"
echo $? # ← 戻り値としての終了ステータス
🚪 スクリプトの終了
スクリプトの途中や最後で exit 数値 を使うと、任意の終了ステータスで終了できます。
#!/bin/bash
echo "処理開始"
exit 1 # ← 失敗として終了
💡 注意点
returnは関数内でのみ使用します。exitはスクリプト全体を終了させます。
🛠 デバッグ方法
スクリプトの動作を確認したいときは以下のようにします。
| オプション | 説明 | 実行例 |
|---|---|---|
bash -v | スクリプトの内容を表示しながら実行 | ![]() |
bash -x | 各コマンドを展開して実行内容を表示(トラブルシュートに最適) | ![]() |
👨💻 まとめ
| 概要 | 内容 |
|---|---|
| 作成方法 | #!/bin/bash で始め、chmod +x で実行可能にする |
| 制御構文 | if, case, for, while などでロジックを構成 |
| 引数処理 | $1, $#, shift, $@ などで柔軟に対応可能 |
| デバッグ | bash -x, bash -v を活用してスクリプトを検証 |
| 実行権限 | chmod, chown でセキュリティも意識すること |
シェルスクリプトはLinux管理や業務自動化に欠かせないスキルです。まずは小さなスクリプトから試して、徐々に応用していきましょう!













コメント