Bash 関数は関連するコマンドを1つの名前でまとめます。その名前を呼び出すと、ブロック全体が実行されます。引数を渡して動作をカスタマイズでき、戻り値で結果を返すことができます。このおかげでコードはシンプルで保守しやすくなります。
Linux は世界中のサーバー環境を支配しているため、Bash 関数をマスターすることは今まで以上に重要です。関数を使えば、複雑なスクリプトをシンプルで再利用可能な自動化に変えられます。
このガイドでは基本的な構文から応用的な使用例まで、一通り説明します。関数の宣言方法、パラメータの渡し方、戻り値の扱い方、そして自分のスクリプトで使える実践的な例10個を学べます。
要点まとめ
- Bash 関数は、スクリプト内で何度でも再利用できる名前付きコードブロックです
- 関数を定義するには function_name() { commands; } 構文
- 引数を渡すには $1, $2, $3 位置パラメータ
- 関数はコードの可読性、モジュール性、保守性を向上させます
- 使用 return で関数を終了し、ステータスコード(0 = 成功、0 以外 = 失敗)を返します
- 関数は以下を使ってスクリプト間で共有できます source or export -f
- 実践的な使用例としては、ファイルバックアップ、ディスク監視、入力検証、サービスチェックなどが挙げられます
Bash スクリプトとは

Bash スクリプトとは、Bash シェルを使ったタスク自動化の手法です。Linux のデフォルトコマンドラインインターフェースとして機能し、macOS でも標準ツールとして広く使われています。Bash スクリプトは Bash スクリプト言語で書かれたプログラムで、ターミナルで実行することも、スタンドアロンスクリプトファイルとして実行することもできます。
と共に Linux のデスクトップ利用が着実に増加 さらにサーバー環境全体で支配的なオペレーティングシステムとなっているため、Bash スクリプトのスキルは IT 専門家にとって欠かせません。この言語は Docker、Kubernetes、CI/CD パイプラインといった DevOps ツールと良好に統合されます。
Bash スクリプトを使えば、単純なコマンドから複雑な自動化、システム管理まで様々なタスクをこなせます。繰り返し作業の自動化、メンテナンススクリプトの開発、デプロイメントパイプラインの構築、ソフトウェアシステムの管理、データ処理など、多くの場面で活躍します。
Bash 関数とは

Bash 関数とは、Bash スクリプト内で定義されるか、用途に応じてコマンドプロンプトで対話的に定義される、一連のコマンドの集合体です。一度定義した Bash 関数は、通常のシェルコマンドと同じように、スクリプト内で何度も呼び出すことができ、他のスクリプトからも呼び出せます。
Bash 関数を使うと、複雑な処理を実行できる再利用可能なコードブロックを作成でき、コードを整理して、スクリプトをシンプルにできます。Bash 関数に引数を渡して、関数内でそれらを使って処理を実行できます。Bash 関数は戻り値を返すことができ、スクリプトの他の部分でその値を利用できます。
次に挙げるいくつかの実装方式について説明します simple_function 基本的なロジックには、 simple_inputs 引数の処理と、次のような高度な構造には fibonnaci_recursion.
Bash 関数の基礎 は、自動化に携わるシステム管理者や DevOps エンジニアにとって重要です。以下のセクションでは、これらのタイプについて詳しく説明します。
Bash 関数を使う理由

Bash 関数の定義をカバーしたので、その主な利点を確認しましょう。このセクションは、関数が最も役立つ場面を理解するのに役立ちます。
再利用可能性
Bash 関数を作成すると、強力なツールが手に入ります。コード ブロックを一度書いて、スクリプト内、または他のスクリプト内で何度も再利用できます。
これにより、コードがより効率的になり、重複を排除することで時間が節約されます。関数を 1 か所だけ変更すれば済むため、コードの保守が簡単になります。
可読性
複雑なスクリプトは理解しづらいことがあります。Bash 関数はスクリプトをより小さく管理しやすい部分に分割することで、この問題を解決します。
各関数は、その役割を説明する説明的な名前を持つ特定の目的を果たします。これにより、自分自身と他の人がコードを理解し、保守するのが容易になります。
モジュール性
関数はコードを整理します。ロジックをより小さなモジュールに分割できるため、スクリプト構造をクリーンで管理しやすく保つことができます。
新しい機能を追加する必要がある場合、スクリプトの他の部分に干渉することなく追加できます。機能を削除または変更するときは、スクリプトの残りの部分はそのまま動作します。
Bash 関数のパラメータ
引数またはパラメータを関数に渡すことができます。これらの引数により、関数は受け取る入力に基づいて適応し、異なるアクションを実行できます。
これにより、関数がより多機能で適応性が高くなり、多くの可能性が広がります。同じコードを何度も書く代わりに、異なる入力を処理する 1 つの関数を書きます。
Bash 関数の使い方と使う場所

次に、定義を技術的に詳しく見て、Bash 関数を作成する方法の短い例から始めましょう。次の構文は Unix ベースの環境で使用できます。Windows で作業している場合は、 Windows 10 に Linux Bash をインストール してこれらの例を試すことができます。
Bash 関数の作成
以下のコマンド構造を使用して開始します。
function_name () {
# ここにコマンドを入力してください
}
関数を作成したら、コード内いつでも使用できます。以下は実際の例です。
greet () {
echo "こんにちは、$1!"
}
この関数を呼び出すには Hello World を出力する「Hello, World!」の $1 関数に渡される最初の引数を表します。
自分のスクリプトで使える実践的な例をいくつか紹介します。
# ファイルのバックアップを作成
backup_file () {
cp "$1" "$1.bak"をコピーする "$1" "$1.bak"へ
echo "バックアップを作成しました: $1.bak"
}
# ディレクトリが存在するかチェック、なければ作成
ensure_dir () {
if [ ! -d "$1" ]; then
mkdir -p "$1"
echo "ディレクトリを作成しました: $1"
fi
}
# タイムスタンプ付きでログメッセージを記録
log_message () {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
カスタム Bash 関数は一度定義すれば、スクリプト全体で何度でも呼び出して使えます。
関数の文法の基本
関数はメインスクリプト内のミニスクリプトのような役割を果たしますが、シェルのメモリを共有します。関数を書くときは、以下の3つの特有の動作を押さえておきましょう。
変数のスコープ(ローカル vs グローバル)
関数内の変数はデフォルトではグローバルです。関数内で my_var="test" を定義すると、スクリプト内の既存の my_var を上書きします。必ず local を使って変数を関数内に限定し、副作用を防ぎましょう。
local my_var="value"
位置パラメータ
関数は、スクリプトと同じ $1, $2、そして $@ 変数を使って引数を読み込みます。これらは関数内でローカルであり、関数が終了するとリセットされます。スクリプトの元の引数は、明示的に渡さない限り関数内からはアクセスできません。
戻り値
Bash 関数は Python や Java のようなデータを返すことはできません。 return コマンドは成功か失敗かを示す終了ステータス(0~255)を設定するだけです。実際のデータ(文字列や計算結果など)を返すには、 echo を使い、関数呼び出し時に結果をキャプチャしてください。
result=$(my_function)
役立つ Bash 関数トップ 10
Bash 関数の使い方と作り方を理解したので、スクリプトに追加できる実践的な例を10個紹介します。各関数は一般的な問題を解決し、適切な構造、引数、戻り値を示しています。
1. ファイルバックアップ関数
任意のファイルのタイムスタンプ付きバックアップを作成します。
backup_file () {
ローカル file="$1"
local backup="${file}.$(date +%Y%m%d_%H%M%S).bak"
if [ -f "$file" ]; then
cp "$file" "$backup"
echo "Backup created: $backup"
return 0
else
echo "Error: File not found"
return 1
fi
}
使用方法: backup_file /etc/nginx/nginx.conf
2. ディレクトリチェッカー
ディレクトリが存在するか確認し、必要に応じて作成します:
ensure_dir () {
ローカル dir="$1"
if [ ! -d "$dir" ]; then
mkdir -p "$dir"
echo "Created: $dir"
fi
}
使用方法: ensure_dir /var/log/myapp
3. タイムスタンプ付きロガー
デバッグ用にログメッセージにタイムスタンプを追加します:
log_message () {
ローカル level="$1"
ローカル message="$2"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $message"
}
使用方法: log_message "INFO" "Script started"
4. ディスク容量モニター
ディスク使用量を確認し、閾値を超えた場合は警告します:
check_disk_space () {
ローカル閾値="${1:-80}"
local usage=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
if [ "$usage" -gt "$threshold" ]; then
echo "Warning: Disk usage at ${usage}%"
return 1
fi
return 0
}
使用方法: check_disk_space 90
5. 入力検証ツール
ユーザー入力が空でないことを検証します:
validate_input () {
ローカル入力="$1"
ローカル名="$2″
if [ -z "$input" ]; then
echo "Error: $name cannot be empty"
return 1
fi
return 0
}
使用方法: validate_input "$username" "ユーザー名"
6. サービスステータスチェッカー
サービスが実行中かどうかを確認し、ステータスを報告します:
check_service () {
ローカルサービス="$1"
if systemctl is-active –quiet "$service"; then
echo "$service is running"
return 0
else
echo "$service is not running"
return 1
fi
}
使用方法: check_service nginx
7. ファイル拡張子抽出
ファイル名から拡張子を抽出します:
get_extension () {
ローカルファイル名="$1"
echo "${filename##*.}"
}
使用方法: ext=$(get_extension "document.pdf")
8. 文字列トリマー
文字列から先頭と末尾の空白を削除します:
trim_string () {
ローカル str="$1"
str="${str#"${str%%[![:space:]]*}"}"
str="${str%"${str##*[![:space:]]}"}"
echo "$str"
}
使用方法: clean=$(trim_string " hello world ")
9. セーフファイルアーカイバー
ファイルをカスタムの $HOME/.trash ディレクトリに移動させます。永久削除の代わりにタイムスタンプをファイル名に追加して、前回のバックアップを上書きするのを防ぎます。
safe_remove() {
ローカル file="$1"
local trash="$HOME/.trash"
# 既存ファイルの上書きを防ぐためにタイムスタンプを追加
local new_name="$(basename "$file")_$(date +%s)"
mkdir -p "$trash"
if [ -e "$file" ]; then
mv "$file" "$trash/$new_name"
echo "アーカイブに移動しました: $file -> $trash/$new_name"
else
echo "エラー: $file が見つかりません"
return 1
fi
}
使用方法: safe_remove old_script.sh
10. ステータスレポーター
エラーハンドリングにおける Bash 関数の戻り値メカニズムを示しています。Bash 関数の戻り値は成功 (0) または失敗 (0 以外) を示します:
process_data () {
ローカル file="$1"
if [ ! -f "$file" ]; then
return 1
fi
# ファイルを処理
cat "$file" | wc -l
return 0
}
# 戻り値をチェック
process_data "data.txt"
if [ $? -eq 0 ]; then
echo "処理が完了しました"
else
echo "処理に失敗しました"
fi
ザ $? 変数は最後のコマンドまたは関数呼び出しの終了ステータスをキャプチャします。
| 機能 | 目的 | 主な機能 |
| backup_file | ファイルバックアップの作成 | タイムスタンプ付き命名 |
| ensure_dir | ディレクトリ管理 | 存在しない場合は作成 |
| log_message | ログ | タイムスタンプ接頭辞 |
| check_disk_space | システム監視 | しきい値アラート |
| validate_input | 入力検証 | 空の文字列のチェック |
| check_service | サービス監視 | Systemdインテグレーション |
| get_extension | 文字列解析 | パラメータ拡張 |
| trim_string | 文字列のクリーンアップ | ホワイトスペース削除 |
| safe_remove | 安全な削除 | ゴミ箱 |
| process_data | エラーハンドリング | 戻り値 |
VPS で Bash 関数を実行する
Bash 関数は専用サーバー環境で実行するときに本領を発揮します。Cloudzy の Linux VPS は root アクセスを完全に提供し、シェル環境をカスタマイズして、制限なくシステム全体の関数ライブラリを作成し、サーバー管理タスクを自動化できます。
VPS を使用すれば、 /etc/profile.d/ に再利用可能な関数を保存し、cron ジョブで関数ベースのスクリプトをスケジュールして、デプロイメントと保守の自動化パイプラインを構築できます。当社は 12 の世界的な拠点でサーバーを提供しており、最大 40 Gbps のネットワーク速度と DDR5 メモリを備えているため、スクリプト実行が高速で、データ処理がスムーズです。
このレベルのコントロールにより、VPS はシェルスクリプティングとシステム自動化に真摯に取り組むユーザーに最適です。
結論
Bash関数は、モジュール化と再利用可能なスクリプトを作成するための基本です。関連するコマンドをグループ化し、複雑なロジックをカプセル化することで、コードを読みやすく、保守しやすくできます。クラウドインフラを管理したり、デプロイメントパイプラインを自動化したり、ルーチンのシステム管理タスクを処理したりする場合、関数はスクリプトを整理して効率的に保つのに役立ちます。
この記事では、Bash関数の定義と呼び出し方、10の実用的な関数例、そして自動化プロジェクトを始めるための一般的なユースケースなど、Bash関数の基本をカバーしました。
制御構造(例: Bash if文)と組み合わせることで、関数は強力な自動化のための基本要素を提供します。スクリプトでBash関数を使用することで、よりクリーンでモジュール化された、理解しやすく保守しやすいコードを書くことができます。