これが私の最初の質問です。
オプションを含む小さなスクリプトを作成しようとしていますが、これをやっていますgetopts
。奇妙なことは次のとおりです。
パラメータが変数に割り当てられていないか、常にif
コードブロックに入ります(これが問題のようです)。
スクリプトは次のとおりです。
#!/bin/bash
function work () {
echo "It Works" }
function help () {
echo "Print some help and options" }
while getopts ha:b: OPT; do
case $OPT in
-h)
help
exit
;;
-a)
OPTA=$OPTARG
;;
-b)
OPTB=$OPTARG
;;
\?)
help
break
;;
esac done
echo $OPTB
if [[ -z $OPTB ]]; then
echo "ERROR. Needs OPTB"
fi
if [[ -n $OPTB ]]; then
echo "All OK untill here"
work
fi
常にエラーメッセージを印刷します。
答え1
getopts
オプションから「-」記号を削除してください。
したがって、以下が必要です。
while getopts ha:b: OPT; do
case $OPT in
h)
help
exit
;;
a)
....
getopts
unset OPTA OPTB
変数はスクリプトが受け取る環境にある可能性があるため、()を呼び出す前に変数を消去する必要があります。また、「オプションなし」と「空の引数を持つオプション」を区別できないため、-b ""
スクリプト呼び出しが有効な場合も考慮してください。[[ -z $OPTB ]]
-b
-b