シェルスクリプトでは変数は文字列として扱われるため、他の言語のように+、-のような演算子を用いることができません。そこでシェルスクリプトで数値計算をする場合はexprというコマンドを使用します。また、exprコマンドで使われる演算子は次のようなものがあります。
#!/usr/bin/sh
echo "5 + 2 = `expr 5 + 2`"
echo "5 - 2 = `expr 5 - 2`"
echo "5 * 2 = `expr 5 \* 2`"
echo "10 / 2 = `expr 10 / 2`"
echo "8 % 4 = `expr 8 % 4`"
$ sh sample11.sh 5 + 2 = 7 5 - 2 = 3 5 * 2 = 10 10 / 2 = 5 8 % 4 = 0
次に並べる文字は、シェルスクリプトでは特殊な文字として扱われるため、そのままでは普通の文字として扱えません。
; ( ) | ^ < > & * [ ] $ ` " ' { } [TAB] [SPACE]
これらを普通の文字として扱うためにはエスケープする必要があります。特殊文字をエスケープするには次の3つが使われます。
バックスラッシュ ( \ ) の直後の特殊文字は普通の文字として扱われます。
シングルクォーテーション ( ' ) で囲まれた中の特殊文字はすべて普通の文字として扱われます。
ダブルクォーテーションで囲まれた中の特殊文字は $ ` \ を除いてすべて普通の文字として扱われます。つまり、ダブルクォーテーション中では変数、コマンド置換が行われます。これが、シングルとダブルのクォーテーションの意味の違いです。
よく利用する処理ステップをひとまとめにしておくと、プログラムの効率が良くなり、可読性も増します。関数の定義は次のようにします。
関数名() { コマンド ..... }
関数を呼び出すには、スクリプト中で関数名をコールします。また、引数を渡すことができます。関数の中ではこの引数を$1, $2, ... , $8, $9で使うことができまます。
#!/usr/bin/sh
TestFunc() {
echo ".:[関数処理]:."
echo "引数1: $1"
echo "引数2: $2"
}
TestFunc (*'-')/ o(^-')b"
$ sh sample12.sh .:[関数処理]:. 引数1: (*'-')/ 引数2: o(^-')b"