50% off 全プラン、期間限定。料金は $2.48/mo
残り11分
サーバー及びOS

Bash関数の解説:構文、例、およびユースケース

ケリー・ワトソン By ケリー・ワトソン 11分の読み取り 2025年12月14日に更新
モジュール構造に組み立てられた青く光るコードブロックの3D抽象イラスト。Bash関数を表現しています。

Bash 関数は関連するコマンドを1つの名前でまとめます。その名前を呼び出すと、ブロック全体が実行されます。引数を渡して動作をカスタマイズでき、戻り値で結果を返すことができます。このおかげでコードはシンプルで保守しやすくなります。

Linux は世界中のサーバー環境を支配しているため、Bash 関数をマスターすることは今まで以上に重要です。関数を使えば、複雑なスクリプトをシンプルで再利用可能な自動化に変えられます。

このガイドでは基本的な構文から応用的な使用例まで、一通り説明します。関数の宣言方法、パラメータの渡し方、戻り値の扱い方、そして自分のスクリプトで使える実践的な例10個を学べます。

要点まとめ

  • Bash 関数は、スクリプト内で何度でも再利用できる名前付きコードブロックです
  • 関数を定義するには function_name() { commands; } 構文
  • 引数を渡すには $1, $2, $3 位置パラメータ
  • 関数はコードの可読性、モジュール性、保守性を向上させます
  • 使用 return で関数を終了し、ステータスコード(0 = 成功、0 以外 = 失敗)を返します
  • 関数は以下を使ってスクリプト間で共有できます source or export -f
  • 実践的な使用例としては、ファイルバックアップ、ディスク監視、入力検証、サービスチェックなどが挙げられます

Bash スクリプトとは

Bash コードが自動で書かれる様子を表現した、光る 3D デジタルスクロールのイラスト。Bash スクリプトの自動化を象徴しています。

Bash スクリプトとは、Bash シェルを使ったタスク自動化の手法です。Linux のデフォルトコマンドラインインターフェースとして機能し、macOS でも標準ツールとして広く使われています。Bash スクリプトは Bash スクリプト言語で書かれたプログラムで、ターミナルで実行することも、スタンドアロンスクリプトファイルとして実行することもできます。

と共に Linux のデスクトップ利用が着実に増加 さらにサーバー環境全体で支配的なオペレーティングシステムとなっているため、Bash スクリプトのスキルは IT 専門家にとって欠かせません。この言語は Docker、Kubernetes、CI/CD パイプラインといった DevOps ツールと良好に統合されます。

Bash スクリプトを使えば、単純なコマンドから複雑な自動化、システム管理まで様々なタスクをこなせます。繰り返し作業の自動化、メンテナンススクリプトの開発、デプロイメントパイプラインの構築、ソフトウェアシステムの管理、データ処理など、多くの場面で活躍します。

Bash 関数とは

乱雑なコマンドラインデータが光る処理ゲートで整理される様子を表現した未来的なデジタルイラスト。Bash 関数の動作を象徴しており、左側は余白があります。

Bash 関数とは、Bash スクリプト内で定義されるか、用途に応じてコマンドプロンプトで対話的に定義される、一連のコマンドの集合体です。一度定義した Bash 関数は、通常のシェルコマンドと同じように、スクリプト内で何度も呼び出すことができ、他のスクリプトからも呼び出せます。

Bash 関数を使うと、複雑な処理を実行できる再利用可能なコードブロックを作成でき、コードを整理して、スクリプトをシンプルにできます。Bash 関数に引数を渡して、関数内でそれらを使って処理を実行できます。Bash 関数は戻り値を返すことができ、スクリプトの他の部分でその値を利用できます。

次に挙げるいくつかの実装方式について説明します simple_function 基本的なロジックには、 simple_inputs 引数の処理と、次のような高度な構造には fibonnaci_recursion.

Bash 関数の基礎 は、自動化に携わるシステム管理者や DevOps エンジニアにとって重要です。以下のセクションでは、これらのタイプについて詳しく説明します。

Bash 関数を使う理由

最適化シンボルを備えた光る青いギア、Bash 関数の使用によって得られる効率と速度を表すコード マシンを駆動する。

Bash 関数の定義をカバーしたので、その主な利点を確認しましょう。このセクションは、関数が最も役立つ場面を理解するのに役立ちます。

再利用可能性

Bash 関数を作成すると、強力なツールが手に入ります。コード ブロックを一度書いて、スクリプト内、または他のスクリプト内で何度も再利用できます。

これにより、コードがより効率的になり、重複を排除することで時間が節約されます。関数を 1 か所だけ変更すれば済むため、コードの保守が簡単になります。

可読性

複雑なスクリプトは理解しづらいことがあります。Bash 関数はスクリプトをより小さく管理しやすい部分に分割することで、この問題を解決します。

各関数は、その役割を説明する説明的な名前を持つ特定の目的を果たします。これにより、自分自身と他の人がコードを理解し、保守するのが容易になります。

モジュール性

関数はコードを整理します。ロジックをより小さなモジュールに分割できるため、スクリプト構造をクリーンで管理しやすく保つことができます。

新しい機能を追加する必要がある場合、スクリプトの他の部分に干渉することなく追加できます。機能を削除または変更するときは、スクリプトの残りの部分はそのまま動作します。

Bash 関数のパラメータ

引数またはパラメータを関数に渡すことができます。これらの引数により、関数は受け取る入力に基づいて適応し、異なるアクションを実行できます。

これにより、関数がより多機能で適応性が高くなり、多くの可能性が広がります。同じコードを何度も書く代わりに、異なる入力を処理する 1 つの関数を書きます。

Bash 関数の使い方と使う場所

3D ガラス フロー チャート、スクリプト実行が関数ブロックに分岐して戻る様子を表示し、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関数を使用することで、よりクリーンでモジュール化された、理解しやすく保守しやすいコードを書くことができます。

よくあるご質問

Bash関数はローカル変数を持つことができますか?

はい。Bash関数はlocalキーワードを使ってローカル変数を持つことができます。これにより変数のスコープを関数内に制限し、関数の外にある同じ名前の変数に影響を与えません。

Bash関数は再帰的にできますか?

はい、Bash関数は再帰的にできます。Bashのデフォルトコールスタックサイズは比較的小さいので、実装する再帰関数によっては、実行前にulimit -sコマンドを使ってサイズを増やす必要があるかもしれません。

Bash関数を他のスクリプトで使用できますか?

はい、sourceコマンド(またはその短縮形の.)を使ってBash関数をスクリプト間で共有できます。関数定義を含むファイルをsourceすることで、呼び出し元スクリプト内でそれらの関数が利用可能になります。子プロセスの場合は、export -f function_nameを使って関数にアクセスできるようにします。

Bash関数をパイプラインで使用できますか?

はい。ただし外部コマンドに対しては特定の手順が必要です。スクリプト内では、データを関数に直接パイプできます(例:cat file | my_function)。しかしxargsやfind -execのようなコマンドは新しい環境で実行されます。そこで関数を使用するには、それをエクスポート(export -f my_func)してから、明示的にBashを呼び出す必要があります(例:xargs bash -c 'my_func "$@"')。

シェルスクリプト関数とは何ですか?

シェルスクリプト関数は、シェルスクリプト内で定義されたコードブロックで、特定の目的を果たし、スクリプトのさまざまな部分から呼び出すことができます。関数はコードのモジュール性、再利用性の向上、保守性の向上の点で大きな価値があります。Bashスクリプトの文脈では、関数はスクリプト全体内にカプセル化されています。

共有

ブログから最新記事

読み続ける。

Cosmos Cloudで実行できる最高のセルフホストアプリ - Cosmosダッシュボード周辺のアプリパネル付きカバー画像。
サーバー及びOS

Cosmos Cloudで実行できる最高のセルフホストアプリ: ファイル、メディア、パスワード管理、自動化など

Maybe - Cosmos Cloudをセットアップ済みで、どのアプリが相性良いか確認したい場合、またはCosmosを決めきれずに相性を見たい場合。

ニック・シルバーニック・シルバー 16分で読む
Dockerアプリ管理向けPortainer vs Cosmos Cloud - ハイブリッドセットアップ図とネオン操作ブロック付きカバー。
サーバー及びOS

Portainer vs Cosmos Cloud: Dockerアプリ管理に最適な選択肢

Dockerの基本を理解していて、成長するアプリスタックをより簡潔に実行する方法を探しているなら、Portainer vs Cosmos Cloudの簡潔な回答はこちら。Portainerはより直接的な制御に優れています。

ニック・シルバーニック・シルバー 14分読む
Cosmos Cloud vs CasaOS vs Umbrel - 3つのセルフホストパスが1つの抽象的なクラウドネットワーク世界の中に表示される機能図。
サーバー及びOS

Cosmos Cloud vs CasaOS vs Umbrel: あなたのセットアップに最適なセルフホストプラットフォーム

簡潔に言うと、CasaOSは最も始めやすく、Umbrelは最もクリーンなキュレーション感があり、ドメイン管理をより細かく制御したい場合はCosmos Cloudが適切です。

ニック・シルバーニック・シルバー 11分の読み取り

デプロイの準備はできていますか? $2.48/月からの価格

2008年創業の独立系クラウド。AMD EPYC、NVMe、40 Gbps。14日間返金保証。