shell 脚本中的 Case 语句无法正常工作

shell 脚本中的 Case 语句无法正常工作

bash 脚本中的 case 语句不起作用。下面是我的 shell 脚本的片段。

usage="Usage: \n servicer [ service argument ] {-h}\n"
invalid="\n not a valid option\n"
argument="\n Please use -h option for help\n"

while getopts ":h:s" option
        do
                case "${option}" in
                        s ) service=$OPTARG;;
                        h ) echo -e $usage
                           exit 0
                        ;;
                        * ) echo -e $invalid
                           exit 1
                        ;;
                esac
        done

因此,每当我使用 -h 或 -s 选项运行脚本时,流程都会转到最后一个 * 选项。

答案1

man getops页面不是最容易阅读的。很确定你想要getopts "hs:"。冒号表示前一个选项(字母)的选项参数(参数值)。

  • 不需要h参数,所以没有冒号(:)。

  • 需要s一个参数,因此没有参数的s:. s也是无效的,因为冒号需要一个参数。

  • 其余内容均无效。

我还会将静态字符串(usage=, invalid=, argument=)放在单引号中,并将输出放在双引号中。

usage='Usage: \n servicer [ service argument ] {-h}\n'
invalid='\n not a valid option\n'
argument='\n Please use -h option for help\n'
while getopts "hs:" option; do
    case "${option}" in
        s) service="$OPTARG"
            ;;
        h) echo -e "$usage"
            exit 0
            ;;
        *) echo -e "$invalid"
            exit 1
            ;;
    esac
done

相关内容