#!/bin/bash main(){ # -o 注册短格式选项,选项值为可选的选项,选项值只能紧接选项而不可使用任何符号将其他选项隔开 # --long注册长格式选项, 如果是可选项,那选项值只能使用 = 号连接 # 选项后没有冒号表示选项没有值; 冒号表示后面接参数值,脚本的下一个参数被解析成选项值;两个冒号表示值可选,选项与选项值连写表示有值,分开表示无值。 set -- $(getopt -o i:p::h --long ip:,port::,help -- "$@") #选项参数 while true do case "$1" in -i|--ip) echo "ip: $2"; shift;; -p|--port) echo "port: $2"; shift;; -h|--help) echo " Usage: -i, --ip target server ip -p, --port target service port -h, --help display this help and exit "; exit;; --) shift; break;; #这里跳出循环,-- 用作一个结束标识 *) echo "无效选项:$1";; esac shift done #剩余参数 for param in "$@" do echo "Param: $param" done } echo ‘正确用法1:main -i 192.168.3.1 -p3306 nginx-server nginx.conf‘ main -i 192.168.3.1 -p3306 nginx-server nginx.conf echo ‘============================‘ echo ‘正确用法2:main --ip 192.168.3.1 --port=3306 nginx-server nginx.conf‘ main --ip 192.168.3.1 --port=3306 nginx-server nginx.conf echo ‘============================‘ echo ‘错误用法1:main -p 3306 nginx-server nginx.conf‘ echo ‘原因: -p 是短可选项,选项与值不能分开‘ main -p 3306 nginx-server nginx.conf echo ‘============================‘ echo ‘错误用法2:main -p 3306 nginx-server nginx.conf‘ echo ‘原因: --port 是长可选项,选项与值只能用等号连接‘ main --port 3306 nginx-server nginx.conf