# Shell 传递参数 ## 方式一:$数字 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:**$n**。**n** 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 以下实例我们向脚本传递三个参数,并分别输出,其中 **$0** 为执行的文件名(包含文件路径) ```shell #!/bin/bash # wangyuedong echo "shell传递参数>>>"; echo "执行的文件名: $0"; echo "第一个参数: $1"; echo "第二个参数为:$2"; echo "第三个参数为:$3"; ``` 为脚本设置可执行权限,并执行脚本,输出结果如下所示 ```bash chmod +x wang.sh ./wang.sh 1 2 3 Shell 传递参数实例! 执行的文件名:./wang.sh 第一个参数为:1 第二个参数为:2 第三个参数为:3 ``` 优点:获取参数相对较为容易。 缺点:必须按照特定的顺序输入参数,漏写了参数就会出现参数对应的错误。 ## 方式二:getopts 语法格式 ```bash getopts [option[:]] [Description] variable option: 表示脚本可以使用的选项。 ":":如果某个选项(option)后面出现了冒号(":"),则表示这个选项后面可以接参数(即一段描述信息DESCPRITION) variable:表示将某个选项保存在变量variable中 ``` 实例 ```shell while getopts ":a:b:c" opt do case ${opt} in a) echo "参数a的值$OPTARG" ;; b) echo "参数b的值$OPTARG" ;; c) echo "参数c的值$OPTARG" ;; ?) echo "未知参数" exit 1;; esac done ``` 用一个while循环加case分支获取不同参数,`:a:b:c`相当于定义参数的变量名,有时候可能会有未知参数,所以增加一个?的分支。shell中按下述方式执行脚本。 ```bash ./test.sh -a 1 -b 2 -c 3 ``` 优点:由于使用了-a加参数值的方式进行一一匹配,所以不会参数匹配错误,同时也可以缺省参数,并不会导致参数错误,同时也便于后期参数的扩展和移植。 缺点:脚本执行时参数需要的输入会增多。 getopts方式只可以使用单个字母作为变量名