Bash/シェルスクリプトで関数を使う方法を具体例付きで解説
この記事では、Bashスクリプトにおける関数(function)の使い方を解説します。関数を活用することで、コードの再利用が可能になり、スクリプト全体をシンプルに保つことができます。
同じコードを何度も書く必要があるのに、一度書いて使い回せないのはなぜでしょうか?
それを実現してくれるのが、関数です。
この記事では、Bash/シェルスクリプトでの関数の基本的な使い方から実践的な例までを紹介します。
関数とは?
関数とは、再利用可能なコードのまとまりのことです。関数は引数(パラメータ)を受け取ることができ、異なる入力に対して同じ処理を繰り返し実行できます。
関数は通常、何らかの処理を実行したり、結果を出力・表示したり、後で利用するための値を返したりします。
なぜ関数を使うのか?
例として、「何かが発生したときにメール通知を送るスクリプト」を考えてみましょう。複数の宛先に異なる内容のメールを送りたい場合、関数を使わないと、メール送信のコードをスクリプト内に何度も書き連ねることになります。
しかし関数を使えば、このコードは一度だけ書けば済みます。あとは宛先・件名・本文を変えて呼び出すだけで、重複したコードを書く代わりに1行の関数呼び出しで対応できます。
Bash関数の基本構文
Bash/シェルスクリプトで関数を定義する構文は以下のとおりです。
name_of_function () {
# コマンド
# (任意)戻り値
}
注意すべきポイントは以下のとおりです。
- name_of_function は、関数を呼び出す際に使用する名前です。
- 使用できるのは英数字とアンダースコアのみ!
- 関数名の後には必ず ()(丸括弧)を付けます。
- 括弧の前後のスペースは必須なので忘れずに!
- 関数に実行させたいコードは {}(波括弧)で囲みます。
- 波括弧の外側にあるコードは関数の一部とはみなされず、実行されません。
- COMMANDS の部分には、Linuxシステムで通常使える任意のコマンドを記述できます。
- return を使って値を返すこともできます(詳細は後述の例を参照)。
- 値を指定せずに return を呼び出すと、その時点で関数を早期終了できます。
- 特殊変数 $? には最後に実行されたコマンドの戻り値が格納されるため、関数の実行後にスクリプト内の他の場所でその値を利用できます。
実例と解説
以下の例では、Bash関数のさまざまな要素をすべて網羅しています。各行にコメントを付けて、何をしているのかを詳しく説明しています。
#!/bin/bash
# グローバル変数を定義 - 関数やループの中で定義されていないため、
# スクリプト内のどこからでもアクセスできる
initial_value=3
# 数学的な計算を行う関数を定義
my_math_function () {
# 関数に渡された引数を取得
# 引数は関数名の後ろに続けて指定し、$1、$2...という順番で参照できる
# 以下では、引数の値をローカル変数(関数内でのみ有効)に代入し、
# 何の値か分かりやすくしている
local multiplier_value=$1
local addition_value=$2
# 計算結果をローカル変数に代入
# $(( )) で計算式を囲むことで、計算式を文字列としてではなく、
# 計算結果の数値として変数に代入できる
local result=$(( $initial_value * $multiplier_value + $addition_value ))
# 結果をコンソールに出力
# 関数の使い方によっては、echoによるテキスト出力を結果の取得に利用できる
echo $result
# 戻り値を使って関数から値を返すことも可能
return $result
}
# 異なる引数を渡して関数を呼び出す
# 引数は関数名の後ろにスペース区切りで指定する
# 上記の関数は2つの引数(乗数と加算値)を受け取る
my_math_function 2 4 # 10 を出力する(2 * 3 + 4)
my_math_function 3 5 # 14 を出力する(3 * 3 + 5)
# $? はBashスクリプトの特殊変数で、常に最後に実行されたコマンドの戻り値を保持する
# これにより、関数がreturnで返した値を取得できる
echo $? # 14 を出力する
# 関数の実行結果を変数に代入する
# この方法では、関数が出力したテキスト(例:echoコマンドの出力)が変数に代入される
my_result=$(my_math_function 6 7)
echo $my_result # 25 を出力する(6 * 3 + 7)
関連記事
Linuxシェルスクリプト冒頭の「#!」(シバン)の意味については、こちらの記事をご覧ください。
また、シェルスクリプト自体に値を渡したい場合(それをさらにスクリプト内の関数に渡すなど)は、引数の扱い方について解説した記事も参考になります。
-
Bashシェル関数入門:実用的な6つのサンプル例で学ぶチュートリアル
Bashシェル関数とは、複数のUNIX/Linuxコマンドをひとつの名前でグループ化し、後からまとめて実行できるようにする仕組みです。Bashシェル関数は通常のUnixコマンドと同じように呼び出すことができ、現在のシェルコンテキスト内で実行されるため、解釈用の新しいプロセスを生成する必要がありません。bashのエイリアス(alias)と関数はどちらも、長いコマンドや複雑なコマンドに対するショートカットを定義するのに役立ちます。しかし、エイリアスでは制御フローや引数の扱いなど、関数ならではの高度な処理を行うことはできません。本記事では、その違いも含めて詳しく解説していきます。この記事は、進行中の
-
Excelのデータベース関数とは?12種類の使い方を実例付きでわかりやすく解説
この記事では、Excelのデータベース関数の使い方を詳しく解説します。Excelには12種類のデータベース関数が用意されており、それぞれの適用方法を一つずつ紹介していきます。まずは記事全体の概要を以下の画像でご確認ください。記事を最後まで読めば、すべての関数の使い方を習得できます。 練習用ワークブックは、下のダウンロードボタンから入手できます。 Excelのデータベース関数の基礎知識 Excelのデータベース関数を使うと、特定のデータベース(リスト)に対して合計、積、平均などの基本的な計算を簡単に実行できます。データベース関数は全部で12種類あり、DSUM、DAVERAGE、DCOUNT、D