这是我试过的脚本:
#!/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
并退出脚本。请帮我解决这个问题。
答案 0 :(得分:1)
有三种参数:选项,选项参数和位置参数。如果参数是需要参数的选项,则无论如何,下一个参数都将被视为参数。它可以以破折号开始,或者甚至与有效选项一致,它仍将被视为选项参数。
如果你的程序想要拒绝以破折号开头的参数,你需要自己编程。以破折号开头的密码完全合法;检查密码的程序不得拒绝它们。
接受可选参数的选项非常混乱且非标准。 Getopt一般不支持它们。有一个GNU扩展,但没有使用它。
TL; DR没有什么可以解决的,你的脚本很好。
答案 1 :(得分:0)
我还没有测试过您的脚本,但我认为如果您使用getopts
代替boost::function
,您将获得预期的结果,因为-a不是一个有效的选择。