#12 シェル関数

シェルスクリプトにて何度も同じ処理を実行する場面が多々あった場合、処理をひとまとめにして関数にすることができる。

関数名を付け、実効するコマンドを定義することで後からその名前で処理を呼び出すことができる。機能ごとに関数にまとめてこくことで見通しがよくなる。

書式

function [関数名] ()
{
  処理・・・
}

冒頭の「function」を省略して記述するとも可能。当サイトでは最もよく使われているこの形式で記述していく。

シェル関数の定義の例

Vimで「func-test-01.sh」というファイル名を作成、以下を記述、実行権限を付与する。

#!/bin/bash

date-ls ()
{
  date
  ls -la
}

date-ls

「date」で現在日時を取得、「ls」コマンドでファイル一覧を取得すrというコマンドが「date-ls」という名前の関数内に設定されている。
最後に関数「date-ls」を実行。
関数を実行する前に関数を定義しておく必要がある。
※今回の例の場合、「date-ls ()」より以前に「date-ls」の実行を記述してしまうとエラーとなる。

シェル関数の位置パラメータの例

#!/bin/bash

print_param ()
{
  echo "\$1 = $1"
  echo "\$2 = $2"
  echo "\$3 = $3"
  echo
  echo "$#arguments"
  echo "script name is $0"
}

print_param first second third

「print_param」関数内で引数を3つまで表示させ、空白1行を入れ、「$#」で引数の数を表示させ、最後に0番目の引数でファイル名を表示させている。

「print_param」関数を実行時に引数として「first」「second」「third」の3つを指定している。
実行結果

$1 = first
$2 = second
$3 = third

3arguments
script name is ./func-param.sh

シェル関数の終了ステータス

通常コマンドと同様に、シェル関数も終了ステータスを返す。
シェル関数内で最後に実行されたコマンドの終了ステータスが、そのままシェル関数の終了ステータスとなる。

シェル関数を終了させる書式

return [終了ステータス]

シェル関数の終了ステータスの例

#!/bin/bash

checkparam ()
{
  if [ -z "$1" ]; then
    return 1
  fi

  ls "$1"
}

引数が指定されていない場合、終了ステータスとして「1」を返す。

シェルスクリプト の一覧