スタックオーバーフロー投稿コマンドライン引数を処理するためのテンプレートがあります。
このテストは、[ $# == 0 ]
bashスクリプトがパラメータなしで実行されるべきではないことを意味しますか?テンプレートなので、通常はスクリプトにパラメータが必ずしも必要ではないと思います。
case
声明でこれら2つの状況の違いは何ですか*)
?"?")
彼らは同じように見えます。
# --- Options processing -------------------------------------------
if [ $# == 0 ] ; then
echo $USAGE
exit 1;
fi
while getopts ":i:vh" optname
do
case "$optname" in
"v")
echo "Version $VERSION"
exit 0;
;;
"i")
echo "-i argument: $OPTARG"
;;
"h")
echo $USAGE
exit 0;
;;
"?")
echo "Unknown option $OPTARG"
exit 0;
;;
":")
echo "No argument value for option $OPTARG"
exit 0;
;;
*)
echo "Unknown error while processing options"
exit 0;
;;
esac
done
shift $(($OPTIND - 1))
param1=$1
param2=$2
ベストアンサー1
スクリプトには1つ以上のパラメータが必要です。パラメータがない場合は使用法情報を表示します。echo $USAGE >&2
バグなので、これを行う必要があります。他のスクリプトではパラメータがゼロになる可能性があるため、変更する必要があります。一部の人々がこの主張を受け入れないようですi
。
「?」、そして*
はい、違います。
"?"
彼は一つを探していると言った?
。これは予期しないオプション(間違ったオプション)が見つかったときにgetoptsが返すものです。*
一致する他の項目が見つからない場合は、このようにしてください。これは起こってはいけませんが、起こることがあります。 getoptsのバグまたはプログラムのバグである可能性が高い(防御プログラミングを参照)。