我在BASH .sh脚本中有一个while-do循环,它执行简单的命令行参数解析。 当我传递某些参数时,它们会被解析而没有问题(即-w,-s,-d参数)。 但是,如果我传递任何其他参数,看起来循环什么都不做,并且脚本在while循环结束后继续执行代码。
“echo”命令都不打印任何内容。 示例-h, - help,-c, - complete,-e。 我甚至尝试过使用未识别的参数,例如-a -f等。
请帮忙吗? while循环是:
while [[ $# -gt 1 ]]
do
key="$1"
src_not_valid=false
dst_not_valid=false
site_not_valid=false
complete_bucket_copy=false
exclude_worker=false
echo key $key
case $key in
-w|--website)
SITE="$2"
shift # past argument
;;
-s|--source)
SRC_ENV="$2"
shift # past argument
;;
-d|--dest)
DST_ENV="$2"
shift # past argument
;;
-c|--complete)
echo "Complete bucket copy option ON"
complete_bucket_copy=true
;;
-e|--exlude-worker)
echo "Exclude worker option ON"
exclude_worker=true
;;
-h|--help)
echo $str_help
exit
;;
*)
# unknown option
echo "$2 option not recognized\r\n$usage"
exit
;;
esac
shift # past argument or value
done
更新:我忘了提及所有可用的参数接受一个参数,例如“script-name.sh -w foo -s bar -d john” 但是不起作用的参数没有参数,例如-h或--help
答案 0 :(得分:0)
当只有一个参数时,你甚至不进入循环。
您必须按while [[ $# -gt 1 ]]
while [[ $# -ge 1 ]]
BTW您的在线帮助字符串为空,这对调试也没有帮助:)