我想寫一個腳本,需要-c
和-f
其中每個都需要一個選項。爲什麼這些參數解析錯誤?
當我運行我的腳本下面我得到一些意外的錯誤:
$ ./user.sh -c
./user.sh: option requires an argument -- c
Usage: user.sh -c username -f filename
-c username
-f SSH public key
$ ./user.sh -c gg
Error: You have not given a filename.
在第一種情況下,我也喜歡它說我缺少的選項-c
而在第二種情況下我也喜歡它說我缺少-f
。
問題
我怎麼做出這樣的錯誤處理,而我在做什麼錯?
user.sh
#!/bin/bash
usage() {
echo "Usage: user.sh -c username -f filename"
echo " -c username"
echo " -f SSH public key"
echo ""
}
if ! [ "$*" ]; then
usage
exit 1
fi
while getopts "c:f:" opt; do
case $opt in
c) user=$OPTARG;;
f) filename=$OPTARG;;
\?)
echo
usage
exit 1;;
*) echo "Internal error: Unknown option.";;
esac
done
if ! [ $filename ]; then
echo "Error: You have not given a filename."
exit 1
fi
if ! [ $user ]; then
echo "Error: You have not given an username."
exit 1
fi
非常感謝。你知道編寫'--help'輸出的標準嗎?例如。我應該擁有多少空間,並指出強制性和可選參數和選項? –
在摘要行中,可選項目放在方括號中,強制不是:'cmd [-ov] -c username -f filename'。沒有足夠的空間標準。在這個例子中,我用了4;這是足夠的; 2可能是分離的最小值。否則,請瀏覽...使用'--help'運行各種命令並查看它們的功能。有些比其他人長。 –