天天看點

linux 腳本 傳參數,shell中腳本傳參

shell中腳本傳參

shell腳本傳參有下面兩種方式

1. $0,$1,$2..

采用$0,$1,$2..等方式擷取腳本指令行傳入的參數,值得注意的是,$0擷取到的是腳本路徑以及腳本名,後面按順序擷取參數,當參數超過10個時(包括10個),需要使用${10},${11}....才能擷取到參數,但是一般很少會超過10個參數的情況。

1.1 示例:

建立一個test.sh的檔案

#!/bin/bash

echo "腳本名$0"

echo "第一個參數$1"

echo "第二個參數$2"

echo "第三個參數$3"

echo "第四個參數$4"

……

echo "第十個參數$10"

echo "第十個參數${10}"

在shell中執行腳本

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

腳本名./test.sh

第一個參數a

第二個參數b

第三個參數c

第四個參數d

第五個參數e

第六個參數f

第七個參數g

第八個參數h

第九個參數i

第十個參數a0

第十個參數j

可以看到

linux 腳本 傳參數,shell中腳本傳參

10被分成$1讀取到第一個參數a然後拼接字元串0,于是輸出a0。

優點:擷取參數更容易,執行腳本時需要的輸入少

缺點:必須按照順序輸入參數,如果中間漏寫則參數對應就會錯誤

2. 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

在shell中執行腳本,結果如下

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

#在shell中的輸出

參數a的值1

參數b的值2

參數c的值3

優點:由于使用了-a加參數值的方式進行一一比對,是以不會參數比對錯誤,同時也可以預設參數,并不會導緻參數錯誤,同時也便于後期參數的擴充和移植

缺點:腳本執行時參數需要的輸入會增多