咱們在使用腳本的過程當中,還得可以與使用者進行交互。其中一個方法就是可使用命令行參數。shell
shell會將一些稱爲位置參數的特殊變量分配給輸入到命令行中的 全部參數。這也包括shell所執行的腳本名稱。位置參數變量是標準的數字:$0是程序名,$1是第 一個參數,$2是第二個參數,以此類推。參數之間用空格隔開。可是在第9個變量以後,你必須在變量數字周圍加上花括號,好比${10}。bash
下面的shell從命令行接受一個參數$1,用來控制循環的輸出「hello world」的次數。工具
輸出:測試
咱們來輸入字符串試試:命令行
命令 bash paramshell xin日誌輸出:3d
記住,每一個參數都是用空格分隔的,因此shell會將空格當成兩個值的分隔符。要在參數值中包含空格,必需要用引號(單引號或雙引號都可)。指針
引號並不是數據的一部分。它們只是代表數據的起止位置。日誌
能夠用$0參數獲取shell在命令行啓動的腳本名。這在編寫多功能工具時很方便。blog
簡單的咱們能夠輸出剛剛那個腳本文件名。字符串
輸出:
可是你若是用另外一種方式執行的,會收到奇怪的結果,文件前面多了一點東西。
當傳給$0變量的實際字符串不單單是腳本名,而是完整的腳本路徑時, 變量$0就會使用整個路徑,不過咱們可使用basename來解決問題。
固然就像寫程序同樣,咱們會判斷空指針同樣,在腳本中咱們也會用-n測試來檢查命令行參數$1中是否有數據(這個可能須要看shell的類型,有的會報錯)。好比:if [ -n "$1" ]。
參數統計
特殊變量$#含有腳本運行時攜帶的命令行參數的個數。
輸出以下:
獲取全部的參數
$*變量會將命令行上提供的全部參數看成一個單詞保存。
$@變量會將命令行上提供的全部參數看成同一字符串中的多個獨立的單詞。這樣 你就可以遍歷全部的參數值,獲得每一個參數。
輸出:
shift命令
在使用shift命令時,默認狀況下它會將每一個參數變量向左移動一個位置。因此,變量$3 的值會移到$2中,變量$2的值會移到$1中,而變量$1的值則會被刪除(注意,變量$0的值,也 就是程序名,不會改變)
輸出:
下節再續!
有什麼討論的內容,能夠加我公衆號: