在bash中,我如何以任意随机顺序拥有一组参数?像一对键值对?

sta*_*low 8 bash

例:

./myscript --ip 192.168.1.1 --port 1985
Run Code Online (Sandbox Code Playgroud)

或另一种可能的

./myscript --port 1985 --ip 192.168.1.1
Run Code Online (Sandbox Code Playgroud)

我想允许我的脚本以任何顺序获取一组参数

./myscript a b c d
./myscript d c b a
./myscript b d a c
Run Code Online (Sandbox Code Playgroud)

诸如此类

c00*_*ter 12

看一眼 getopts

getopts:getopts optstring name [arg]
解析选项参数.

shell过程使用Getopts将位置参数解析为选项.

OPTSTRING包含要识别的选项字母; 如果一个字母后面跟一个冒号,那么该选项应该有一个参数,该参数应该用空格分隔.

每次调用它时,getopts都会将下一个选项放在shell变量$ name中,如果它不存在则初始化name,以及要处理到shell变量OPTIND中的下一个参数的索引.每次调用shell或shell脚本时,OPTIND都会初始化为1.当一个选项需要一个参数时,getopts将该参数放入shell变量中OPTARG.

getopts以两种方式之一报告错误.如果OPTSTRING的第一个字符是冒号,则getopts使用静默错误报告.在此模式下,不会打印任何错误消息.如果看到无效选项,则getopts将找到的选项字符放入OPTARG.如果找不到必需的参数,则getopts 会在NAME中放置一个' : '并将OPTARG设置为找到的选项字符.如果getopts未处于静默模式,并且看到无效选项,则getopts将放置'?' 进入NAME并取消OPTARG.如果找不到所需的参数,' ' '置于NAME中,未设置OPTARG,并打印诊断消息.

如果shell变量OPTERR的值为0,则即使OPTSTRING的第一个字符不是冒号,getopts也会禁用错误消息的打印.OPTERR默认值为1.

Getopts通常会解析位置参数($ 0 - $ 9),但如果给出更多参数,则会解析它们.

退出状态:
如果找到选项,则返回成功; 如果遇到选项结束或发生错误,则会失败.


cmb*_*ley 8

您可以使用getopts解析命令行参数.本教程对入门非常有用.


Aki*_*kif 5

这个简单的脚本采用p带有i参数的端口号和 ip 地址。

而 getopts "i:p:" 选项;做
  case $option in
    i) ip_address=$OPTARG
    echo "ip 地址: $ip_address"
    ;;
    p ) 端口号=$OPTARG
    echo "端口号:$port_number"
    ;;
  esac
完毕

可以通过以下任一方式执行:

./myscript -i 192.168.1.1 -p 1985

或者

./myscript -p 1985 -i 192.168.1.1

执行时打印:

IP地址:192.168.1.1
端口号:1985

同样如http://wiki.bash-hackers.org/howto/getopts_tutorial 所述

请注意,getopts 无法解析 GNU 样式的长选项 (--myoption) 或 XF86 样式的长选项 (-myoption)

因此,您不能将长字符串用作--port--ip直接与getopts. 但是,此链接中描述的其他解决方法可用:http :
//www.bahmanm.com/blogs/command-line-options-how-to-parse-in-bash-using-getopt