【问题标题】:getopts: unable to identify argumentsgetopts:无法识别参数
【发布时间】:2017-10-23 05:41:29
【问题描述】:

这是我试过的脚本:

#!/bin/bash
while getopts ":u:p:" option; do
        case $option in
                u) USER=$OPTARG;;
                p) PASS=$OPTARG;;
                \?) echo "Invalid Option: $OPTARG"
                    exit 1;;
                :) echo "Please provide an argument for $OPTARG!"
                   exit 1;;
        esac
done
echo "Username/Password: $USER/$PASS"

如果运行脚本的命令是:

./test9.sh -u test -p -a

然后我得到一个输出:

Username/Password: test/-a

-a 是无效参数,但脚本将 -a 作为密码。我想显示一条消息Please enter a password 并退出脚本。请帮我解决这个问题。

【问题讨论】:

    标签: linux shell unix getopt


    【解决方案1】:

    共有三种参数:选项、选项参数和位置参数。如果参数是需要参数的选项,则无论如何下一个参数都将被视为参数。它可能以破折号开头,甚至与有效选项一致,但仍将被视为选项参数。

    如果您的程序想要拒绝以破折号开头的参数,您需要自己编写程序。以破折号开头的密码是完全合法的;检查密码的程序不能拒绝它们。

    接受 可选 参数的选项非常令人困惑和不标准。 Getopt 通常不支持它们。有一个 GNU 扩展,但不要使用它。

    TL;DR 没有什么可修复的,你的脚本很好。

    【讨论】:

      【解决方案2】:

      我没有测试你的脚本,但我认为如果你使用getopt 而不是getopts 你会得到你期望的结果,一个错误,因为-a 不是一个有效的选项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-10
        • 1970-01-01
        • 2019-07-14
        • 2013-08-09
        • 2015-02-17
        • 1970-01-01
        • 2021-09-28
        • 2021-08-16
        相关资源
        最近更新 更多