iT邦幫忙

DAY 20
1

我與BASH shell scripting的每一天系列 第 20

我與BASH的每一天 - [20] 代表參數位置的特殊變數符號與shift

對於參數的輸入方式,BASH利用**$1,.. $9等9的特殊變數來代表參數的順序(位置),$1代表第一個參數,$2代表第二個參數,以此類推,而$0則代表程式本身。現在我的問題來了,我的輸入需要超過10個參數,可是我卻不能使用$10來作為第10個變數,因為BASH會看成是$1後面跟著一個0**。這種情況就要透過shift指令的協助。

shift指令的的用法很簡單,只呼叫一次shift,他就將所有的參數位置一起往左移(shift)一次,也就是**$3變成$2**,$2變成**$1**,以此類推,而原本的**$1就不見了。所以在搭配使用shift指令時,永遠只需要提取當下的參數($1**),然後每提取一次就shift一次,直到取完所有參數。

while [ “$#” -ge “1” ]; do
     echo “Current parameter: $1”
     shift
done

我使用while命令來測試參數長度($#)是否大於1 (-gt 1),再藉由shift由右往左移動參數,每移位就少一個,直到0為止。

[系列文章]

我與BASH的每一天 - [1]利用bc命令來取得數字字串中的特定欄位值
我與BASH的每一天 - [2]直取字串變數中的特定欄位值
我與BASH的每一天 - [3] 利用awk來擷取特定欄位
我與BASH的每一天 - [4] 利用awk來擷取特定欄位-2
我與BASH的每一天 - [5] 利用awk來擷取特定欄位-3
我與BASH的每一天 - [6] 利用cut來擷取特定欄位
我與BASH的每一天 - [7] grep指令的妙用 - 1
我與BASH的每一天 - [8] grep指令的妙用 - 2
我與BASH的每一天 - [9] 正規化表示法 - 1
我與BASH的每一天 - [10] 正規化表示法 - 2
我與BASH的每一天 - [11] 正規化表示法 - 3
我與BASH的每一天 - [12] 正規化表示法 - 4
我與BASH的每一天 - [13] sed - 1
我與BASH的每一天 - [14] sed - 2
我與BASH的每一天 - [15] sed - 3
我與BASH的每一天 - [16] 多條件選擇 - case
我與BASH的每一天 - [17] 建立自動化的暫存檔 - mktemp
我與BASH的每一天 - [18] if 條件判斷的正規化用法
我與BASH的每一天 - [19] 複合式的條件判斷


上一篇
我與BASH的每一天 - [19] 複合式的條件判斷
下一篇
我與BASH的每一天 - [21] 特殊的參數變數符號: $@ 與 $*
系列文
我與BASH shell scripting的每一天31

尚未有邦友留言

立即登入留言