シェルスクリプト(sh): 関数

2023-08-17

シェルスクリプト(sh)では、関数が定義可能。
定義した関数は、シェルスクリプト内からコマンドとして呼び出せる。

例 (まず fnc という関数を定義しておいて次にそれを呼び出すなど)

#!/bin/sh

fnc() {
        local arg num
    
	num=$#

	if [ $num -eq 0 ]; then
		return 1
	else
		echo $num args
	fi

        for arg
        do
                echo $arg
        done
    
        return 0
}

fnc abc 123 xyz || echo error1
fnc || echo error2

echo arg is \"$arg\"
echo num is \"$num\"

# EoF

すなわち、関数を定義するときは、概ね以下のように書く。 (処理の中身が 1行しかない場合 { } は省略できたと思うが普通は書くと思う)

関数名() {
        処理の中身
}

関数への引数が $1 $2 $3 .. に入っており、また引数の個数が $# に入っている。 これはシェルスクリプトをコマンドラインで実行した時のコマンドライン引数の扱われ方と似ている。
local でローカル変数 (関数を抜けると自動的に消滅する) を定義できる。
return で戻値を数値で返せる (0 だったら関数が正常に終了したとか等に使える)。

実行例 (先程の例を funcsample.sh というファイル名で保存しているものとする)

% sh funcsample.sh
3 args
abc
123
xyz
error2
arg is ""
num is ""

もし fnc 内の local が無いと以下のようになる。

% sh funcsample.sh
3 args
abc
123
xyz
error2
arg is "xyz"
num is "0"

以上


覚書など | シェルスクリプト (sh) を書くときに知っておくと便利な話 | nsmrtks