50%オフ すべてのプラン、期間限定。から開始 $2.48/mo
残り11分
サーバーとOS

Bash 関数の説明: 構文、例、使用例

ケリー・ワトソン By ケリー・ワトソン 11 分で読めます 2025 年 12 月 14 日更新
Bash 関数を表す、モジュール構造に組み立てられる輝く青いコード ブロックの抽象的な 3 D イラストレーション

Bash 関数は、関連するコマンドを 1 つの名前でグループ化します。その名前を呼び出すと、ブロック全体が実行されます。引数を渡して動作をカスタマイズし、値を返して結果を伝えることができます。これにより、コードがクリーンに保たれ、保守が容易になります。

Linux は世界中でサーバー環境を支配しているため、Bash 機能を習得することがこれまで以上に重要になっています。関数は、煩雑なスクリプトをクリーンで再利用可能な自動化に変換します。

このガイドでは、基本的な構文から高度な使用例までを説明します。関数の宣言、パラメーターの受け渡し、戻り値の処理方法を学び、独自のスクリプトで使用できる 10 個の実践的な例を参照します。

TL;DR

  • Bash 関数は、スクリプト全体で再利用できる名前付きコード ブロックです。
  • を使用して関数を定義します function_name() { コマンド; } 構文
  • を使用して引数を渡します $1, $2, $3 位置パラメータ
  • 関数によりコードの可読性、モジュール性、メンテナンスが向上します
  • 使用 戻る 関数を終了し、ステータス コード (0 = 成功、0 以外 = 失敗) を伝達します。
  • 関数はスクリプト間で共有できます。 ソース or エクスポート -f
  • 実際の例には、ファイルのバックアップ、ディスクの監視、入力の検証、サービスのチェックなどがあります。

Bash スクリプトとは何ですか?

Bash スクリプトの自動化を表す、光る Bash コード自体が記述されたデジタル スクロールの 3D イラストレーション。

Bash スクリプトは、Bash シェルを使用してタスクを自動化する方法です。これは Linux のデフォルトのコマンドライン インターフェイスとして機能し、macOS では引き続き標準ツールです。 Bash スクリプトは、Bash スクリプト言語でコーディングされたプログラムであり、ターミナルまたはスタンドアロン スクリプト ファイルとして実行できます。

Linux デスクトップの使用が着実に増加 世界中のサーバー環境を支配するオペレーティング システムでは、Bash スクリプト スキルが IT プロフェッショナルにとって貴重なものとなっています。この言語は、Docker、Kubernetes、CI/CD パイプラインなどの DevOps ツールと適切に統合されます。

Bash スクリプトを使用すると、単純なコマンドから複雑な自動化やシステム管理までのタスクを実行できます。反復的なタスクを自動化し、メンテナンス スクリプトを開発し、展開パイプラインを構築し、ソフトウェア システムを管理し、データを操作することができます。

Bash関数とは何ですか?

乱雑なコマンド ライン データが光る処理ゲートによって整理されていることを示す未来的なデジタル イラスト。Bash 関数の動作方法を象徴しており、左側には空白が表示されます。

Bash 関数は、ユースケースに応じて、Bash スクリプト内で定義されるか、コマンド プロンプトで対話的に設定されるコマンドのセットとして定義できます。 Bash 関数を定義すると、通常のシェル コマンドと同様に、スクリプト内または他のスクリプト内で複数回呼び出すことができます。

Bash 関数を使用すると、複雑な操作を実行し、コードを整理し、スクリプトを簡素化できる再利用可能なコード ブロックを作成できます。 Bash 関数に引数を渡し、関数内でそれらを使用して操作を実行できます。 Bash 関数は、スクリプト内の他の場所で使用できる値を返します。

いくつかの具体的な実装スタイルについて説明します。 単純な関数 基本的なロジックについては、 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 関数の作成

次のコマンド構造を使用して開始します。

関数名 () {

    # ここにコマンドが入ります

}

 

関数を作成したら、いつでもコード内で使用できます。以下に実際の例を示します。

挨拶する () {

    エコー「こんにちは、1ドル!」

}

 

この関数を呼び出すと、 世界に挨拶します 「Hello, World!」を出力します。の $1 は関数に渡される最初の引数を表します。

独自のスクリプトで使用できるさらに実用的な例をいくつか示します。

# 任意のファイルのバックアップを作成する

バックアップファイル () {

    cp「$1」「$1.bak」

    echo 「バックアップが作成されました: $1.bak」

}

 

# ディレクトリが存在するかどうかを確認し、存在しない場合は作成します

ensure_dir () {

    もし [ ! -d “$1” ];それから

        mkdir -p “$1”

        echo 「作成されたディレクトリ: $1」

    fi

}

 

# タイムスタンプ付きのログメッセージ

ログメッセージ () {

    echo “[$(date '+%Y-%m-%d %H:%M:%S')] $1”

}

 

これらのカスタム Bash 関数を一度定義すると、スクリプト全体で必要なときにいつでも呼び出すことができます。

関数構文の基礎

関数はメイン スクリプト内のミニスクリプトのように動作しますが、シェルのメモリを共有します。作成するときは、これら 3 つの特定の動作を念頭に置いてください。

変数のスコープ (ローカルとグローバル)

関数内の変数はデフォルトでグローバルです。定義すると my_var=”テスト” 関数内では既存の関数をオーバーライドします。 my_var あなたのスクリプトで。常に使用する 地元 変数を関数に制限すると、副作用が防止されます。

ローカル my_var=”値”

位置パラメータ

関数は同じものを使用して引数を読み取ります $1, $2、 そして $@ 変数をスクリプトとして使用します。これらは関数に対してローカルであり、関数が終了するとリセットされます。スクリプトの元の引数は、明示的に渡さない限り、関数内でアクセスできません。

戻り値

Bash 関数は、Python や JavaScript 関数のようにデータを返しません。の 戻る コマンドは、成功または失敗を示す終了ステータス (0 ~ 255) を設定するだけです。実際のデータ (文字列や計算など) を返すには、 エコー 結果を取得し、関数を呼び出すときにそれをキャプチャします。

結果=$(my_function)

便利な Bash 関数の例トップ 10

Bash 関数とその作成方法を理解したところで、スクリプトに追加できる 10 の実用的な例を次に示します。各関数は一般的な問題を解決し、適切な構造、引数、戻り値を示します。

1. ファイルバックアップ機能

任意のファイルのタイムスタンプ付きバックアップを作成します。

バックアップファイル () {

    ローカルファイル=”$1”

    ローカルバックアップ=”${ファイル}.$(日付+%Y%m%d_%H%M%S).bak”

    

    if [ -f “$file” ];それから

        cp “$file” “$backup”

        echo 「バックアップが作成されました: $backup」

        0を返す

    それ以外

        echo 「エラー: ファイルが見つかりません」

        1を返す

    fi

}

 

使用法: バックアップファイル /etc/nginx/nginx.conf

2. ディレクトリチェッカー

ディレクトリが存在するかどうかを確認し、必要に応じて作成します。

ensure_dir () {

    ローカルディレクトリ=”$1”

    

    もし [ ! -d “$dir” ];それから

        mkdir -p “$dir”

        エコー「作成されました: $dir」

    fi

}

 

使用法: ensure_dir /var/log/myapp

3. タイムスタンプ付きロガー

デバッグ用にログ メッセージにタイムスタンプを追加します。

ログメッセージ () {

    ローカルレベル=”$1”

    ローカルメッセージ=”$2”

    echo “[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $message”

}

 

使用法: log_message "情報" "スクリプトが開始されました"

4. ディスク容量モニター

ディスク使用量をチェックし、しきい値を超えた場合は警告します。

check_disk_space () {

    ローカルしきい値=”${1:-80}”

    ローカル使用法=$(df / | tail -1 | awk ‘{print $5}’ | tr -d ‘%’)

    

    if [ “$usage” -gt “$threshold” ];それから

        echo 「警告: ディスク使用量が ${usage}% です」

        1を返す

    fi

    0を返す

}

 

使用法: チェックディスクスペース 90

5. 入力バリデータ

ユーザー入力が空でないことを検証します。

validate_input () {

    ローカル入力=”$1”

    ローカル名=”$2”

    

    if [ -z “$input” ];それから

        echo 「エラー: $name を空にすることはできません」

        1を返す

    fi

    0を返す

}

 

使用法: validate_input "$username" "ユーザー名"

6. サービスステータスチェッカー

サービスが実行されているかどうかを確認し、ステータスを報告します。

check_service () {

    ローカルサービス=”$1”

    

    systemctl がアクティブな場合 –quiet “$service”;それから

        エコー「$service が実行中です」

        0を返す

    それ以外

        エコー「$service が実行されていません」

        1を返す

    fi

}

 

使用法: check_service nginx

7. ファイル拡張子エクストラクター

ファイル名から拡張子を抽出します。

get_extension() {

    ローカルファイル名=”$1”

    エコー「${ファイル名##*.}」

}

 

使用法: ext=$(get_extension “document.pdf”)

8. ストリングトリマー

文字列から先頭と末尾の空白を削除します。

トリム文字列 () {

    ローカル str=”$1”

    str=”${str#”${str%%[![:space:]]*}”}”

    str=”${str%”${str##*[![:space:]]}”}”

    「$str」をエコーする

}

 

使用法: clean=$(trim_string ” hello world ”)

9. 安全なファイルアーカイバー

ファイルを完全に削除するのではなく、カスタム $HOME/.trash ディレクトリに移動します。以前のバックアップが上書きされないように、ファイル名にタイムスタンプが追加されます。

安全な削除() {

    ローカルファイル=”$1”

    ローカルのゴミ箱=”$HOME/.trash”

    # 既存のファイルの上書きを避けるためにタイムスタンプを追加します

    local new_name=”$(ベース名 “$file”)_$(日付 +%s)”

    

    mkdir -p “$trash”

 

    if [ -e “$file” ];それから

        mv “$file” “$trash/$new_name”

        echo 「アーカイブに移動しました: $file -> $trash/$new_name」

    それ以外

        echo 「エラー: $file が見つかりません」

        1を返す

    fi

}

 

使用法: 安全な削除 old_script.sh

 

10. ステータスレポーター

エラー処理のための Bash 関数の戻りメカニズムを示します。 Bash 関数の戻り値は、成功 (0) または失敗 (0 以外) を示します。

プロセスデータ () {

    ローカルファイル=”$1”

    

    もし [ ! -f “$file” ];それから

        1を返す

    fi

    

    # ファイルを処理する

    猫「$file」 |トイレ -l

    0を返す

}

 

# 戻り値を確認する

プロセスデータ「data.txt」

もし[$? -eq 0 ];それから

    エコー「処理が完了しました」

それ以外

    エコー「処理に失敗しました」

fi

 

$? 変数は、最後のコマンドまたは関数呼び出しからの終了ステータスを取得します。

関数 目的 主な機能
バックアップファイル ファイルのバックアップを作成する タイムスタンプ付きの命名
保証ディレクトリ ディレクトリ管理 不足している場合は作成します
ログメッセージ ロギング タイムスタンププレフィックス
ディスクスペースの確認 システム監視 しきい値アラート
入力の検証 入力の検証 空文字列チェック
チェックサービス サービス監視 システム統合
get_extension 文字列の解析 パラメータの拡張
トリム文字列 文字列のクリーンアップ 空白の削除
安全な削除 安全な削除 ゴミ箱ディレクトリ
プロセスデータ エラー処理 戻り値

VPS での Bash 関数の実行

Bash の機能は、専用サーバー環境で実行すると強力になります。私たちの Linux VPS シェル環境のカスタマイズ、システム全体の関数ライブラリの作成、サーバー管理タスクの自動化を制限なく行うための完全な root アクセス権が与えられます。

VPS を使用すると、再利用可能な機能を次の場所に保存できます。 /etc/profile.d/ すべてのユーザーに対して、cron ジョブを介して関数ベースのスクリプトをスケジュールし、展開とメンテナンスのための自動パイプラインを構築します。当社は、最大 40 Gbps のネットワーク速度と DDR5 メモリを備えたサーバーを世界 12 か所に提供しています。これは、より高速なスクリプト実行とよりスムーズなデータ処理を意味します。

このレベルの制御により、VPS はシェル スクリプトとシステムの自動化に真剣に取り組む人にとって理想的なものになります。

結論

Bash 関数は、モジュール式で再利用可能なスクリプトを作成するための鍵となります。これにより、関連するコマンドをグループ化し、複雑なロジックをカプセル化してコードを読みやすく、保守しやすくすることができます。クラウド インフラストラクチャの管理、展開パイプラインの自動化、または日常的なシステム管理タスクの処理を行っている場合、関数はスクリプトを整理して効率的に保つのに役立ちます。

この記事では、Bash 関数の定義と呼び出し方法、10 個の実用的な関数の例、および独自の自動化プロジェクトを開始するのに役立つ一般的な使用例など、Bash 関数の基本について説明しました。

のような制御構造と組み合わせると、 Bash の if ステートメント, 関数は、強力な自動化のための構成要素を提供します。スクリプトで Bash 関数を使用すると、理解しやすく、保守しやすい、よりクリーンでモジュール化されたコードを作成できます。

よくある質問

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

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

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

はい、Bash 関数は再帰的に使用できます。 Bash のデフォルトのコール スタック サイズは比較的小さいため、念頭に置いている再帰関数によっては、実行前に ulimit -s コマンドを使用してサイズを増やす必要がある場合があります。

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

はい、source コマンド (またはその短縮形 .) を使用して、スクリプト間で Bash 関数を共有できます。関数定義を含むファイルを取得すると、呼び出し側スクリプトでそれらの関数を使用できるようになります。子プロセスの場合、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 で実行できる最高のセルフホスト アプリ: ファイル、メディア、パスワード、オートメーションなど!

おそらく、Cosmos Cloud を設定済みで、どのアプリがそれによく適合するかを知りたいと考えているかもしれません。あるいは、Cosmos をまだ決めておらず、それが自分のワークフローにどれだけ適合するかを確認したいだけかもしれません。

ニック・シルバーニック・シルバー 16 分で読めます
Docker アプリの管理のための Porttainer と Cosmos Cloud では、ハイブリッド セットアップの図とネオン運用とアクセス ブロックが取り上げられています。
サーバーとOS

Porttainer 対 Cosmos Cloud: Docker アプリ管理に最適

すでに Docker を知っていて、成長するアプリ スタックを実行するためのよりクリーンな方法が必要な場合は、Porttainer と Cosmos Cloud に対する簡単な答えをここに示します。ポーテイナーはディレックにとってより強力なピックだ

ニック・シルバーニック・シルバー 14 分で読めます
Cosmos Cloud、CasaOS、Umbrel のフィーチャー グラフィックは、1 つの抽象的なクラウド ネットワーク世界内の 3 つのセルフホスト パスを示しています。
サーバーとOS

Cosmos Cloud vs CasaOS vs Umbrel: どのセルフホスト プラットフォームがあなたのセットアップに適合しますか?

簡単に言うと、CasaOS は依然として最も簡単に始めることができ、Umbrel は最もすっきりと厳選された感触があり、Doma をより厳密に制御したい場合は Cosmos Cloud が合理的です。

ニック・シルバーニック・シルバー 11 分で読めます

導入する準備はできていますか? 月額 $2.48 から。

2008 年以降の独立したクラウド。AMD EPYC、NVMe、40 Gbps。 14日間の返金。