私は3つのコマンドライン引数を受け付けるbashスクリプトを持っています。例えば、スクリプトはscript -c <value> -h <value> -w <value>
のように実行されます。引数のcaseコマンドを使用してコマンドライン引数を解析するコーナーケースを処理する適切な方法
- 順序は引数は、引数のいずれかが不足している場合は、エラーメッセージが
- を印刷された値を、持っていない場合、エラーメッセージがある
- 重要ではありません:私はことを保証したいと思います未知の引数が存在する場合、エラーメッセージが
私はcase
文を次のようにこれを達成を
#!/bin/bash
while :; do
case "$1" in
-h)
[[ x${2%%-*} != x ]] || { echo "Value for "$1" missing!"; exit 1; }
host="$2"
shift 2
;;
-w)
[[ x${2%%-*} != x ]] || { echo "Value for "$1" missing!"; exit 1; }
warning="$2"
shift 2
;;
-c)
[[ x${2%%-*} != x ]] || { echo "Value for "$1" missing!"; exit 1; }
critical="$2"
shift 2
;;
"")
[[ $host && $warning && $critical ]] || { echo "One of the arguments is missing!"; exit 1; }
break
;;
*)
echo "Unknow option"
exit 1
;;
esac
done
しかし、case
には、[[ ]]
のすべてのテストを回避できる高度なオプションがあります。上記のようなコーナーケースもカバーしたい場合は、コマンドライン引数を処理するために別のメソッドを使用する必要がありますか?
通常、これらのようなものが[のgetopt](http://man7.org/linux/man-pages/man1/getopt.1によって確認されています.html) – user3159253
こちらの例をご覧ください。http://stackoverflow.com/questions/16483119/example-of-how-to-use-getopts-in-bash – user3159253
[Bash FAQ 035](http://mywiki.wooledge。 org/BashFAQ/035)とページがリンクされています。 –