Linux bash代码没有在while-do循环中执行

时间:2016-10-08 09:53:30

标签: bash

我在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

1 个答案:

答案 0 :(得分:0)

当只有一个参数时,你甚至不进入循环。

您必须按while [[ $# -gt 1 ]]

更改while [[ $# -ge 1 ]]

BTW您的在线帮助字符串为空,这对调试也没有帮助:)