示例:
./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
Etcetera
答案 0 :(得分:12)
看看getopts
getopts :getopts optstring name [arg]
解析选项参数。shell程序使用Getopts来解析位置参数 作为选项。
OPTSTRING
包含要识别的选项字母;如果一封信 后跟一个冒号,期望有一个参数, 白色空间应该与它分开。每次调用它时,getopts都会将下一个选项放入 shell变量$ name,初始化名称(如果它不存在),以及 要处理到shell中的下一个参数的索引 变量OPTIND。每次shell或者OPTIND初始化为1 调用shell脚本。当一个选项需要参数时, getopts将该参数放入shell变量
OPTARG
。getopts以两种方式之一报告错误。如果是第一个字符 OPTSTRING是一个冒号,getopts使用无提示错误报告。在 此模式下,不会打印任何错误消息。如果选项无效 看到,getopts将选项字符放入OPTARG中。如果一个 找不到必需的参数,getopts将一个':'放入NAME和 将OPTARG设置为找到的选项字符。如果没有getopts 静默模式,看到无效选项,getopts放置'?'成 NAME并取消设置OPTARG。如果找不到必需的参数,则为“?” 放置在NAME中,取消设置OPTARG,并显示诊断消息 打印。
如果shell变量
OPTERR
的值为0,则getopts将禁用 打印错误消息,即使是第一个字符 OPTSTRING不是冒号。 OPTERR默认值为1。Getopts通常会解析位置参数($ 0 - $ 9),但是如果 给出了更多的参数,它们被解析了。
退出状态:
如果找到选项,则返回成功;如果选项结束,则失败 遇到或发生错误。
答案 1 :(得分:8)
您可以使用getopts
来解析命令行参数。 This tutorial对于开始使用非常有用。
答案 2 :(得分:4)
这个简单的脚本使用带有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
可以以任何一种方式执行:
./myscript -i 192.168.1.1 -p 1985
或
./myscript -p 1985 -i 192.168.1.1
执行时打印:
ip address: 192.168.1.1 port number: 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