bash 引数処理のサンプルスクリプト

bash 引数処理のサンプルスクリプト

$* と $@ との差異がいまいちわからんのは秘密

hirasawa@ubu1204:~/download$ cat restart.sh 
#!/bin/bash
# restart.sh
#   examples ...... 
#   ex case restarting (has error)   ) ./restart.sh date -h
#   ex case just closing (prog ends w/o problem ) ./restart.sh date --help

# http://shellscript.sunone.me/parameter.html
# bash 引数を処理する

###変数名	自動的に設定される値
###
#   $#...実行時に指定された引数の数を表す変数。
###  「$ ./test.sh AAA BBB CCC」と実行された場合、
###   シェルスクリプト test.sh 内で変数 $# を参照するとその値は 3 となる。
###
#   $@...シェルスクリプト実行時、
### もしくは set コマンド実行時に指定された全パラメータが設定される変数。
### 変数 $* と基本的に同じだが、 "" で囲んだときの動作が異なる。
###
#   $*...シェルスクリプト実行時、
### もしくは set コマンド実行時に指定された全パラメータが設定される変数。
###変数 $@ と基本的に同じだが、 "" で囲んだときの動作が異なる。
#
###
#  $0... 実行時のコマンド名が設定される変数。
###「./test.sh」と実行した場合には「./test.sh」が、
### 「/home/user/test.sh」と実行した場合には「/home/user/test.sh」が設定される。
###$1 〜 $n	シェルスクリプト実行時に指定した引数の値がそれぞれ設定される変数。
###1番目に指定した引数は $1 に、2番目に指定した引数は $2 に、n 番目に指定した引数は $n に設定される。10番目以降の引数参照時は ${10} のように「{}」を使用する必要がある。これは 「$10」 を 「$1 "0"」 のように、シェルに誤った解釈をされるのを防ぐためである。


if test $# -le 0  ; then        # $# 引数の総数
	echo "USAGE: command"
	exit -1
fi

ret=-1

# ret が 0のとき以外、プログラムを再起動し続ける
while test ${ret} -ne 0
do
	echo '----> $*: ' $*
	echo '----> $@: ' $@
	# プログラムの実行   # $@  引数のstrings (ex: date -h or date --help)
	$@
	
	# 戻り値をチェック
	ret=$?
	echo "----< end : ret = $ret"
	
	# 再起動するまでにちょっとスリープ
	# これが無いと、結構困る
	sleep 1;
done

echo "end"
hirasawa@ubu1204:~/download$