シェルスクリプト入門|Linux操作を自動化しよう

Linuxでは、繰り返し行う作業を自動化できる「シェルスクリプト」が非常に便利です。

この記事では、Bashスクリプトの基本構造、制御構文、引数処理、デバッグ方法などを体系的に解説します。


目次

📝 シェルスクリプトとは?

シェルスクリプトは、Linuxのコマンドをまとめて自動実行するためのスクリプトファイル(テキストファイル)です。拡張子は .sh にするのが一般的です。

コマンドをたくさん実行したい時や、繰り返し実行したい時、自動化したい時などに作るととても便利です。


🔰 スクリプトの基本構造

最初に「シバン(shebang) 」というものを指定します。
シバンの次の行からは好きな処理を記入するだけです。

シバンはシェルスクリプトの冒頭で出てくるこれ:#!/bin/bash

これは「このスクリプトは /bin/bash インタプリタで実行してください」という意味です。bash がスクリプトを1行ずつ読みながら動かしてくれます。

インタプリタ(interpreter)とは?

プログラムのコードを1行ずつ読み取り、その場で実行する仕組みのことです。

🔍 インタプリタの意味

  • プログラムを 事前に機械語に翻訳しない
  • 実行時に 1行ずつ読み取ってその場で処理する
  • 代表例:bashpythonrubyperl

⚙ スクリプトの作成と実行手順

STEP
ファイルを作成vi test.sh
STEP
実行権限を付与:chmod +x test.sh
STEP
実行
スクロールできます
実行方法説明実行例
./test.sh推奨。現在のシェルを使わず、#!/bin/bash などで指定されたシェルで実行される。
bash test.shBashで強制的に実行。#!/bin/sh などに関係なくBashで動かしたいときに使う。
sh test.shPOSIX互換の 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シェルスクリプトにおける条件分岐の基本は ifcase 文です。処理を状況に応じて変えるために使います。

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

シェルスクリプトにおけるループ処理は、繰り返し処理を実行するために forwhile を使います。


🔁 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管理や業務自動化に欠かせないスキルです。まずは小さなスクリプトから試して、徐々に応用していきましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次