[英]Getopts default case bash script
我想使用getopts,但是默認情況下不起作用。
我嘗試的代碼是:
while getopts "sdp" arg; do
case "$arg" in
s)
echo "1"
;;
p)
echo "2"
;;
d)
echo "3"
;;
*)
echo "default"
;;
esac
當我運行該過程時:./myTask
我沒有收到任何輸出
它按預期工作。
默認情況不是處理沒有參數的情況,而是提供無效參數的情況:
$ ./myTest -X
./myTest: illegal option -- X
default
通常,在這種情況下,您將編寫使用情況消息。
這是case
語句的默認值,但這意味着在getopts
上下文中特定的東西:您定義了一個選項,但沒有子句可以處理它。
例如,如果運行./myTask -z
,您將在此處的另一個答案中看到@that_other_guy聲明的“默認”輸出。
如果要輸出指示未提供任何選項的內容:
然后在while getopts
塊之后但在shift $(($OPTIND - 1))
行之前,執行此操作(對if
塊進行所需的任何處理:
if ((OPTIND == 1))
then
echo "No options specified"
fi
請注意,這並不表示未指定任何參數 (例如,如您問題中的./myTask
)。 要執行此操作,請在shift
行之后添加以下內容:
if (($# == 0))
then
echo "No positional arguments specified"
fi
請在我的答案中查看 getopts
函數的參考實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.