我是shell腳本的新手。我編寫了一個腳本,其中包含零個或多個選項以及一個可選的路徑參數。如果未設置路徑參數,我想使用當前目錄。如何檢測參數是否傳遞給腳本?
這是腳本的參數分析部:
OPTIONS=$(getopt -o dhlv -l drop-databases,help,learner-portal,verifier-portal -- "[email protected]")
if [ $? -ne 0 ]; then
echo "getopt error"
exit 1
fi
eval set -- $OPTIONS
while true; do
case "$1" in
-d|--drop-databases) RESETDB=1
;;
-h|--help) echo "$usage"
exit
;;
-l|--learner-portal) LERPOR=1
;;
-v|--verifier-portal) VERPOR=1
;;
--) shift
break;;
*) echo -e "\e[31munknown option: $1\e[0m"
echo "$usage"
exit 1
;;
esac
shift
done
# Set directory of module
if [[ -n $BASH_ARGV ]]
then
MOD_DIR=$(readlink -f $BASH_ARGV)
fi
if [[ -n $MOD_DIR ]]
then
cd $MOD_DIR
fi
該腳本按預期正常運行時調用不和論據,或當這兩個選項和路徑調用。
然而,當我運行該腳本,只有指定的選項,我得到的readlink像這樣
$ rebuild_module -dv
readlink: invalid option -- 'd'
Try 'readlink --help' for more information.
顯然,這是解析選項正確的錯誤,但我不知道如何檢測,我沒有通過路徑,因此避免調用readlink。我該如何去糾正這種行爲?
-dv正常工作。任何標誌組合都可以工作。 – evanjdooner 2014-09-03 13:02:27
謝謝埃文,我沒有仔細觀察。 – 2014-09-03 13:14:46