天天看點

Shell程式設計中Shift的用法(轉)

位置參數可以用<code>shift</code>指令左移。比如<code>shift 3</code>表示原來的<code>$4</code>現在變成<code>$1</code>,原來的<code>$5</code>現在變成<code>$2</code>等等,原來的<code>$1</code>、<code>$2</code>、<code>$3</code>丢棄,<code>$0</code>不移動。不帶參數的<code>shift</code>指令相當于<code>shift 1</code>。

非常有用的 Unix 指令:shift。我們知道,對于位置變量或指令行參數,其個數必須是确定的,或者當 Shell 程式不知道其個數時,可以把所有參數一起指派給變量$*。若使用者要求 Shell 在不知道位置變量個數的情況下,還能逐個的把參數一一處理,也就是在 $1 後為 $2,在 $2 後面為 $3 等。在 shift 指令執行前變量 $1 的值在 shift 指令執行後就不可用了。

示例如下:

#測試 shift 指令(x_shift.sh)

until [ $# -eq 0 ]

do

echo "第一個參數為: $1 參數個數為: $#"

shift

done

執行以上程式x_shift.sh:

$./x_shift.sh 1 2 3 4

結果顯示如下:

第一個參數為: 1 參數個數為: 4

第一個參數為: 2 參數個數為: 3

第一個參數為: 3 參數個數為: 2

第一個參數為: 4 參數個數為: 1

從上可知 shift 指令每執行一次,變量的個數($#)減一,而變量值提前一位,下面代碼用 until 和 shift 指令計算所有指令行參數的和。

#shift 上檔指令的應用(x_shift2.sh)

if [ $# -eq 0 ]

then

echo "Usage:x_shift2.sh 參數"

exit 1

fi

sum=0

sum=`expr $sum + $1`

echo "sum is: $sum"

執行上述程式:

$x_shift2.sh 10 20 15

其顯示結果為:

45

  Shift 指令還有另外一個重要用途, Bsh 定義了9個位置變量,從 $1 到 $9,這并不意味着使用者在指令行隻能使用9個參數,借助 shift 指令可以通路多于9個的參數。

  Shift 指令一次移動參數的個數由其所帶的參數指定。例如當 shell 程式處理完前九個指令行參數後,可以使用 shift 9 指令把 $10 移到 $1。

http://www.cnblogs.com/image-eye/archive/2011/08/20/2147153.html