シェル関数

関数名 () {
    [コマンド]
}

引数は $1 〜 $9 が利用できる。この引数はシェルスクリプト全体の定位置パラメータとは無関係で、シェル関数に与えられたローカルな変数。

戻り値は return で指定可能。return を書かなかった場合には最後に実行したコマンドの戻り値を返す。

#!/bin/sh
sum () {
    echo `expr $1 + $2`
}

sum 2 3

ヒアドキュメント

<<EOT から EOT までの行を入力として取り込む (EOT のところはなんでもよい)。

<<'EOT' とすると変数が展開されない。

#!/bin/sh
cat <<EOT
line 1
line 2
line 3
EOT

read 変数を使って 1 行ずつ読み取らせることもできる。

#!/bin/sh
while read id ; do
    echo "id = $id"
done <<EOT
id1
id2
EOT

トラップ

指定したシグナルが発生したときにコマンドを実行する。

trap [コマンド] [シグナル]
名称 意味
1 HUP ハングアップ
2 INT 割り込み (Ctrl + C)
3 QUIT プログラムの実行を中止
9 KILL プログラムの強制終了
15 TERM プログラムの終了

以下のスクリプトは途中で Ctrl + C を押すと stopped と表示されてスクリプトが終了する。

#!/bin/sh
trap "echo stopped; exit" INT
echo start
sleep 10
echo end

目次へ