はsh myscript.sh -a hello
としてスクリプトを呼び出す場合getoptで引数を取らない引数にパラメータを渡さないようにするには?例えば
#!/bin/sh
OPTS=`getopt -o ahb:c: --long help,name:,email: -- "[email protected]"`
#echo "$OPTS"
eval set -- "$OPTS"
usage() {
echo "type -h for help"
}
while true; do
case "$1" in
-a) echo "a is a short option that do not take parameters"; shift ;;
-b) echo "b is a short option that requires one parameter and you specified $2"; shift 2;;
-c) echo "c is a short option that requires one parameter and you specified $2"; shift 2;;
--name) echo "your name is $2"; shift 2;;
--email) echo "your email is $2"; shift 2;;
-h | --help) echo "Google search yourself !"; shift 1;;
--) usage ; shift; break ;;
*) echo "hello"; break ;;
esac
done
だから、それは-aがパラメータを取らないことを伝えるエラーをスローする必要があり、このスクリプトを検討してください。
これを行う方法はありますか?
あなたは「** - a **は何もパラメータを取っていません」と言っていると思います。しかし、それはそうではありません。なぜなら、オプションの後に来るものはすべて引数とみなされるからです。 –
@MichaelVehrsそう言及してくれてありがとう。私はその質問を編集した。しかし、getoptは - または - 接頭辞付きのものだけを引数とみなします。そうではありませんか?だから私はそれを行う方法があるはずです。 – Veera
私はあなたが何を意味するか分からないが、 'myscript -a hello -b'は' -a'が最後のオプションではないので失敗するはずです。一方、 'myscript -a hello'は完全に問題ありません。この場合、' hello'は位置パラメータです。 –