繁体   English   中英

getopts:无法识别参数

[英]getopts: unable to identify arguments

这是我尝试的脚本:

#!/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并退出脚本。 请帮助我解决此问题。

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

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

接受可选参数的选项非常混乱且不规范。 Getopt通常不支持它们。 有一个GNU扩展,但是不要使用它。

TL; DR没有要修复的内容,您的脚本很好。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM