シェルスクリプト入門 [関数・オプション]

UNIX入門 > シェルスクリプト入門 > 関数・オプション
関数の作成
オプションの使用

関数・オプション

関数の作成

シェルスクリプトでも関数を作成することができます。
関数は下記のような構文になります。

関数名()
{
  処理
  ・・・
}

C言語のように括弧の中に引数を記述する必要はありません。関数に引数を渡す場合は、シェルと同じようにスペース区切りで渡します。関数に渡された引数を参照する場合も、シェルと同じように「$1, $2, ...」と参照します。呼び出し元に終了コードを返す場合は「return コード」と記述します。以下は関数を使用したサンプルスクリプトです。
func.sh

#!/bin/sh
arg_chk()
{
# 引数の数が2の場合
if test $# -eq 2
then
  return 0
# 引数の数が2以外の場合
else
  return 1
fi
}

arg_chk $@
ret=$?
echo "引数チェック結果=${ret}"

関数「arg_chk」で、引数の数をチェックして、2の場合は戻り値「0」で終了し、それ以外の場合は戻り値「1」で終了します。それでは実際に上記スクリプトに3つの引数を渡して実行してみます。以下のような結果となります。

$ func.sh a b c
引数チェック結果=1
$

関数を使用した応用的なプログラムについては、サンプルスクリプト集で解説します。

↑先頭へ

オプションの使用

シェルには、コマンドのオプションを解析したりチェックしたりするための、「getopts」というコマンドがあります。スクリプトに「シェル名 -l abc」のようにオプションを利用して引数を渡したい場合に使用します。以下に「getopts」コマンドを利用したサンプルスクリプトを紹介します。
getopts.sh

#!/bin/sh
while getopts l:t: opt
do
  case ${opt} in
  l)
   LIST=${OPTARG};;
  t)
   TYPE=${OPTARG};;
  \?)
   exit 1;;
  esac
done
echo "LIST=${LIST}"
echo "TYPE=${TYPE}"

l:t:」の部分は、「-l」と「-t」というオプションを取得するという意味で、オプション文字の後ろに「:」(コロン)を付けて、複数指定できます。変数「opt」には、「l」または「t」という文字列が順番に格納され、case文で「l」の場合、「t」の場合と処理を分岐させています。変数${OPTARG}は、オプションに続く文字列が格納さる「getopts」コマンド固有の変数です。
それでは実際に上記スクリプトを実行してみます。以下のような結果となります。

$ getopts.sh -l list -t type
LIST=list
TYPE=type
$

上記の例では、「-l」オプションで文字列「list」、「-t」オプションで文字列「type」を渡して、「echo」コマンドで表示しています。「-l」「-t」以外のオプションが渡された場合は、終了コード「1」で終了します。

↑先頭へ