shift 命令的使用

2021-08-30 23:04:24 字數 1899 閱讀 4896

shift 命令的使用

我們知道,對於位置變數或命令列引數,其個數必須是確定的,或者當shell程式不知道其個數時,可以把所有引數一起賦值給變數$*。若使用者要求shell在不知道位置變數個數的情況下,還能逐個的把引數一一處理,也就是在$1後為$2,在$2後面為$3等。在 shift命令執行前變數$1的值在shift命令執行後就不可用了。

示例如下:

#測試shift命令(x_shift.sh)

until [ $# -eq 0 ]

doecho "第乙個引數為: $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

fisum=0

until [ $# -eq 0 ]

dosum=`expr $sum + $1`

shift

done

echo "sum is: $sum"

執行上述程式:

$x_shift2.sh 10 20 15

其顯示結果為:

45shift命令還有另外乙個重要用途,bsh定義了9個位置變數,從$1到$9,這並不意味著使用者在命令列只能使用9個引數,借助shift命令可以訪問多於9個的引數。

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

在熟悉了shift命令後,我們一起看看,bsh程式中非常有用的for迴圈語句,這種迴圈同上面說的while和until迴圈不同,for語句中的迴圈是否執行並不由某個條件的真和假來決定,決定for迴圈是否繼續的條件是參數列中是否還有未處理的引數。

除錯shell程式

使用者剛編寫完shell程式中,不可避免的會有錯誤,這時我們可以利用bsh中提供的跟蹤選項,該選項會顯示剛剛執行的命令及引數。使用者可以通過set命令開啟-x選項或在啟動shell使用-x選項將shell設定成跟蹤模式。例如有下面**ice_tx:

if [ $# -eq 0 ]

then

echo "usage:sumints integer list"

exit 1

fisum=0

until [ $# -eq 0 ]

dosum='expr $sum + $1'

shift

done

echo $sum

我們用跟蹤模式執行:

$sh -x ice_tx 2 3 4

結果顯示:

+[ 3 -eq 0 ]

+sum=0

+[ 3 -eq 0 ]

+expr 0+2

+sum=2

+shift

+[ 2 -eq 0 ]

+expr 2+3

+sum=5

+shift

+[ 1 -eq 0 ]

+expr 5+4

+sum=9

+[ 0 -eq 0 ]

+echo 9

9從上面可以看出,跟蹤模式下shell顯示執行的每一條命令以及該命令使用的變數替換後的引數值。一些控制字如if、then、until等沒顯示。

shift 命令的使用

在shell 中 shift 命令 從n 1 的位置引數 被重新命名為 1 用數字 降至 n 1 其中n值必須是非負,並且小於或者等於 如果n為0 沒有引數被改變。如果n假定為1,如果n大於 位置引數不會改變。返回狀態是大於零,如果n大於 或小於0否則為0。對於某個命令列引數,其引數個數可以不固定,...

Linux中的shift命令

shift命令的使用 對於某個命令列引數,其引數個數可以不固定,但是可以通過 或 進行迴圈操作。若使用者要求shell在不知道變數個數的情況下,還能逐個處理引數,也就是在 1之後是 2,2之後是 3。在未執行shift命令之前 1是可用的,當使用shift命令之後,原來的 2會變成 1,並且原有的 ...

Linux中的shift命令

shift命令的使用 對於某個命令列引數,其引數個數可以不固定,但是可以通過 或 進行迴圈操作。若使用者要求shell在不知道變數個數的情況下,還能逐個處理引數,也就是在 1之後是 2,2之後是 3。在未執行shift命令之前 1是可用的,當使用shift命令之後,原來的 2會變成 1,並且原有的 ...