shell脚本getopts命令实现传参

需求:某些脚本需要往服务器传数据(数据库、消息队列等),为了增加脚本的可移植性,一般使用传参的方式将连接服务器的数据信息传入脚本内

一般有两种方法传参

1、使用位置变量($1、$2、$3....):此方法的缺点是传值的顺序有严格要求,顺序错误将导致脚本执行失败

2、使用getopt/getopts:提供一个接收参数的选项,再根据选项获取对应的参数

 

getopt和getopts的区别是,getopt可以使用长选项名,而且功能更强大,但是使用起来更复杂,getopts只能使用短选项名,但是使用较为方便。

本次使用getopts方法传参,首先简单介绍一下该方法:

1、getopts是linux系统中的一个内置变量,一般用在循环中。

2、每次执行循环时,getopts都会检查下一个命令选项,如果这些选项出现在option中,则表示是合法选项,否则不是合法选项。

3、getopts包含两个内置变量 ,OPTARG和OPTIND

4、其中合法选项保存在OPTARG这个内置变量中。

5、变量OPTIND表示参数位置信息

 

脚本范例:

cat test.sh
#!/bin/bash
while
getopts ":a:b:c:" opt do case $opt in a) echo "a=$OPTARG" echo "$OPTIND" ;; b) echo "b=$OPTARG" echo "$OPTIND" ;; c) echo "c=$OPTARG" echo "$OPTIND" ;; *) echo "未知参数" exit 1 ;; esac done
sh test.sh -a 100 -b 200 -c 300    #执行结果
a=100
3
b=200
5
c=300
7

 

应用到实际生产环境中

#!/bin/bash
while getopts ":h:p:u:P:d" opt
do
    case $opt in
        h)
        mysqlip=$OPTARG
        ;;
        p)
        mysqlport=$OPTARG
        ;;
        u)
        mysqluser=$OPTARG
        ;;
        P)
        mysqlpasswd=$OPTARG
        ;;
        d)
        mysqldatabase=$OPTARG
        ;;
        *)
        echo "未知参数"
        exit 1
        ;;
    esac
done

#采集过滤内容省略 #mysql执行命令省
略 mysql -u$mysqluser -P$mysqlpasswd --database "$mysqldatabase" -h$mysqlip -p$mysqlport -e "$mysql执行命令"

至此,采集脚本可以根据服务器的变化灵活传参,也增强了可移植性

posted @ 2021-02-25 17:28  zhangsi-lzq  阅读(500)  评论(0编辑  收藏  举报