例:
./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),但如果给出更多参数,则会解析它们.
退出状态:
如果找到选项,则返回成功; 如果遇到选项结束或发生错误,则会失败.
这个简单的脚本采用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