関数の作成
シェルスクリプトでも関数を作成することができます。
関数は下記のような構文になります。
関数名()
{
処理
・・・
}
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」で終了します。
↑先頭へ