shell中脚本参数传递的两种方式

方式一:$0,$1,$2..shell

采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),须要使用${10},${11}....才能获取到参数,可是通常不多会超过10个参数的状况。bash

1.1 示例:新建一个test.sh的文件命令行

#!/bin/bash
echo "脚本$0"
echo "第一个参数$1"
echo "第二个参数$2"
在shell中执行脚本,结果以下字符串

$ ./test.sh 1 2
 
#shell中将会输出:
脚本./test.sh
第一个参数1
第二个参数2
1.2 下面是参数超过10个的状况,在test.sh文件写入get

#!/bin/bash
echo "脚本名$0"
echo "第一个参数$1"
echo "第二个参数$2"
echo "第三个参数$3"
echo "第四个参数$4"
……
echo "第十个参数$10"
echo "第十个参数${10}"
在shell中执行脚本,结果以下it

$ ./test.sh a b c d e f g h i jio

#shell中将会输出:
脚本名./test.sh
第一个参数a
第二个参数b
第三个参数c
第四个参数d
第五个参数e
第六个参数f
第七个参数g
第八个参数h
第九个参数i
第十个参数a0
第十个参数j
能够看到${10}正确读取到了第十个参数,而$10被分红$1读取到第一个参数a而后拼接字符串0,因而输出a0。test

优势:获取参数更容易,执行脚本时须要的输入少变量

缺点:必须按照顺序输入参数,若是中间漏写则参数对应就会错误扩展

方式二:getopts

语法格式:getopts [option[:]] [DESCPRITION] VARIABLE
option:表示为某个脚本可使用的选项
":":若是某个选项(option)后面出现了冒号(":"),则表示这个选项后面能够接参数(即一段描述信息DESCPRITION)
VARIABLE:表示将某个选项保存在变量VARIABLE中

2.1 示例:一样新建一个test.sh文件

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中执行脚本,结果以下

$ ./test.sh -a 1 -b 2 -c 3

#在shell中的输出
参数a的值1
参数b的值2
参数c的值3
$ ./test.sh -a 1 -c 3

#在shell中的输出
参数a的值1
参数c的值3
$ ./test.sh -a 1 -c 3 -d 4

#在shell中的输出
参数a的值1
参数c的值3
未知参数
优势:因为使用了-a加参数值的方式进行一一匹配,因此不会参数匹配错误,同时也能够缺省参数,并不会致使参数错误,同时也便于后期参数的扩展和移植

缺点:脚本执行时参数须要的输入会增多

 

总结:推荐使用getopts的方式进行参数传递  

相关文章
相关标签/搜索