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的方式進行參數傳遞  

相關文章
相關標籤/搜索