shell script的預設變數($0,$1...)
阿新 • • 發佈:2018-11-25
Linux的命令可以帶有引數,例如ls -al可以檢視包含隱藏檔案的所有屬性與許可權。那麼shell script能不能在指令碼檔名後面帶有引數呢。舉例子:重啟系統登錄檔檔案的功能:
上面的命令可以重新啟動/etc/init.d/network這個程式。如果在其後面加個stop呢,很明顯,就可以直接關閉該服務了!
如果想要依據程式的執行給予一些變數去進行不同的任務時(雖然可以使用read命令,但是需要手動鍵盤輸入一些判斷式),就可以通過命令後面接引數,那麼一個命令就能夠處理完畢而不需要手動再次輸入一些變數行為!這樣執行命令會比較簡單方便。
script怎樣實現這個功能呢?script針對引數已經有設定好一些變數名稱了!對應如下:
/path/to/scriptname | opt1 | opt2 | opt3 | opt4 |
$0 | $1 | $2 | $3 | $4 |
執行指令碼檔名為$0這個變數,第一個接的引數就是$1。因此只要合理在script裡面善用$1,就可以很簡單地立即執行某些命令功能了!除了這些數字的變數之外,還有一些比較特殊的變數可以在script內使用來呼叫這些引數。
- $#:代表後面接的引數的“個數"
- [email protected]:代表“$1”,"$2","$3","$4"之意,每個變數都是獨立的(用引號括起來)
- $*:代表“"$1c$2c$3c$4"”,其中c為分隔符,預設為空格鍵,所以本例中代表“"$1 $2 $3 $4"”之意
上面的[email protected]和$*基本上還是有所不同的。不過,一般使用情況下可以直接記為[email protected]就可以!
栗子:假設要執行一個攜帶引數的script,執行該指令碼後螢幕會顯示如下的資料:
- 程式的檔名
- 共有幾個引數
- 若引數的個數小於2則告知使用者引數數量太少
- 全部的引數內容
- 第一個引數
- 第二個引數
#!/bin/bash
# Program:
# Program shows the secript name,parameters...
# History:
# 2018/11/25 steve First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo "The script name is ==> $0"
echo "Total paramter number is ==> $#"
[ "$#" -lt 2 ] && echo "The number of number paramter is less than 2. Stop here." \ && exit 0
echo "Your whole parameter is ==> ' [email protected]'"
echo "The 1st parameter ==> $1"
echo "The 2nd parameter ==> $2"
執行結果如下:
- shift:造成引數變數號碼偏移
- 除此之外,指令碼後面所接的變數是否能夠進行偏移(shift)呢?什麼是偏移?見下面的程式碼,將sh07.sh稍作修改,用來顯示每次偏移後引數的變化情況。
#!/bin/bash
# Program:
# Program shows the secript name,parameters...
# History:
# 2018/11/25 steve First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo "Total paramter number is ==> $#"
echo "Your whole parameter is ==> '[email protected]'"
shift # 進行第一次“一個變數的shift”
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '[email protected]'"
shift 3 # 進行第二次“三個變數的shift”
echo "Total paramter number is ==> $#"
echo "Your whole parameter is ==> '[email protected]'"
執行結果如下:
從上面的執行結果就可以看出,shift會移動變數,並且shift後面可以接數字,代表拿掉最前面的幾個引數的意思。上面的執行結果中,第一次進行shift後面它的顯示情況是“two three four five six",就剩五個引數了!第二次直接拿掉三個,就變成“two three four five six”。這樣這個案例就解釋shift的作用了。