在bash中,我如何能够拥有一组任意顺序的参数?像键值对吗?
示例:在bash中,我如何能够拥有一组任意顺序的参数?像键值对吗?,bash,Bash,示例: ./myscript --ip 192.168.1.1 --port 1985 或其他可能的 ./myscript --port 1985 --ip 192.168.1.1 我希望允许脚本以任意顺序获取一组参数 ./myscript a b c d ./myscript d c b a ./myscript b d a c 等等,您可以使用getopts解析命令行参数。开始使用时非常有用。请查看 getopts:getopts optstring名称[arg] 解析选项参数 外壳程
./myscript --ip 192.168.1.1 --port 1985
或其他可能的
./myscript --port 1985 --ip 192.168.1.1
我希望允许脚本以任意顺序获取一组参数
./myscript a b c d
./myscript d c b a
./myscript b d a c
等等,您可以使用
getopts
解析命令行参数。开始使用时非常有用。请查看
getopts:getopts optstring名称[arg]解析选项参数 外壳程序使用Getopts解析位置参数 作为选择
OPTSTRING
包含要识别的选项字母;如果有一封信
后跟冒号,该选项应具有参数,
应该用空格隔开
每次调用它时,getopts都会在
shell变量$name,初始化名称(如果不存在),以及
要处理到shell中的下一个参数的索引
变量OPTIND。每次shell或
调用一个shell脚本。当选项需要参数时,
getopts将该参数放入shell变量OPTARG
getopts以两种方式之一报告错误。如果第一个字符
OPTSTRING的值是冒号,getopts使用静默错误报告。在里面
在该模式下,不会打印错误消息。如果选择了无效选项
如图所示,getopts将找到的选项字符放在OPTARG中。如果
找不到必需的参数,getopts将“:”放在名称和
将OPTARG设置为找到的选项字符。如果getopts不在
静默模式,并且看到一个无效选项,getopts将“?”放入
命名并取消OPTARG。如果找不到所需的参数,则会出现“?”
放置在名称中,OPTARG未设置,并显示诊断消息
印刷品
如果shell变量OPTERR
的值为0,则getopts将禁用
打印错误消息,即使
OPTSTRING不是冒号。OPTERR默认值为1
Getopts通常解析位置参数($0-$9),但如果
如果给出更多参数,则会对其进行解析
退出状态:如果找到一个选项,则返回success;如果选项的结尾为,则失败 遇到错误或发生错误
这个简单的脚本使用
p
获取端口号,使用i
参数获取ip地址
while getopts "i:p:" option; do
case $option in
i ) ip_address=$OPTARG
echo "ip address: $ip_address"
;;
p ) port_number=$OPTARG
echo "port number: $port_number"
;;
esac
done
也如在
请注意,getopts无法解析GNU样式的长选项(-myoption)或XF86样式的长选项(-myoption)
因此,不能直接使用长字符串作为--port
或--ip
与getopts
。
但是,如本链接所述,还有其他解决方法:通常,IP和端口在一个参数中指定:
192.168.1.1:1985
@mouviciel我同意,但这只是为了演示
ip address: 192.168.1.1
port number: 1985