需求:有一个脚本,需要appname、ip、hostname、domain四个参数,并且都不能为空。
main.sh 脚本内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| #!/bin/bash
function usage(){ echo -e "-a -i -H -d are requierd -a: appName -i: ip -h: hostname -d: domain " }
checkOpts () { local key=$1 local value=$2 [[ -z "${value}" ]] \ && echo -e "\033[31mFATAL: ${key} should not be empty! \033[0m" \ && usage \ && return 1 return 0 }
function main(){ while getopts "a:i:H:d:" opt;do case $opt in a) appname=${OPTARG} && echo "appname=${appname}" ;; i) ip=${OPTARG} && echo "ip=${ip}" ;; H) hostname=${OPTARG} && echo "hostname=${hostname}" ;; d) domain=${OPTARG} && echo "domain=${domain}" ;; *) usage && exit 0 ;; esac done
read -p "确认参数无误,继续执行脚本?[Y/N]" input if [[ $input = "y" || $input = "Y" ]];then echo -e "\n------ continue... ------\n" else echo -e "\n------ exit ------\n" exit 1 fi ! checkOpts "appname" ${appname} && exit 1 ! checkOpts "ip" ${ip} && exit 1 ! checkOpts "hostname" ${hostname} && exit 1 ! checkOpts "domain" ${domain} && exit 1 }
main "$@"
|
问题来了,如果想要添加参数怎么办?最简单的思路就是修改getopts部分,添加新的参数。
这里提供另外一个思路:提前留出一个other变量,用来接收多出的参数,这个other变量可以拆分成多个子变量,这样就具备了更好的通用性。