shift移動變數

2022-04-13 10:23:01 字數 3436 閱讀 9969

1、移動變數

指令碼 sh05.sh

#!/bin/bash

# program

# program shows the effect of

shift

function

# history:

# 2015/9/6

zengdp first release

path=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

export path

echo

"total parameter number is ==> $#

"echo

"you whole parameter is ==> '$@'

"shift

echo

"total parameter number is ==> $#

"echo

"you whole parameter is ==> '$@'

"shift

3echo

"total parameter number is ==> $#

"echo

"you whole parameter is ==> '$@'

"

執行 sh sh05.sh one two three four five six

得到

total parameter number is     ==> 6

you whole parameter is ==> '

one two three four five six

'total parameter number is ==> 5

you whole parameter is ==> '

two three four five six

'total parameter number is ==> 2

you whole parameter is ==> '

five six

'

光看結果你就可以知道啦,那個 shift 會移動變數,而且 shift 後面可以接數字,代表拿掉最前面的幾個引數的意思。 上面的執行結果中,第一次進行 shift 後他的顯示情況是『 one two three four five six』,所以就剩下五個啦!第二次直接拿掉三個,就變成『 two three four five six 』啦! 

2、 當使用shift移動乙個變數時,使用while輸出第乙個變數,從而輸出在輸入時所有的變數

檔名為 test13.sh

1 #!/bin/bash

2 # demostrating the shift

command

34 count=1

5while [ -n "$1"

]6do7

echo

"parameter #$count=$1

"8 count=$[$count + 1]9

shift

10done

指令碼執行乙個while迴圈,測試第乙個引數的長度,當第乙個引數值長度為0時,結束迴圈,測試第乙個引數後,使用shift命令將所有引數左移乙個位置

sh test13.sh rich barbara katie jessica

輸出為:

parameter #1=rich

parameter #

2=barbara

parameter #

3=katie

parameter #

4=jessica

3、從引數中分離選項

執行shell指令碼時經常會遇到既需要使用選項有需要使用引數的情況,在linux中的標準方式是通過特殊字元嗎將二者分開,這個特殊字元嗎告訴指令碼選項結束和普通引數開始的位置

對於linux,這個特殊字元嗎就是雙破折號(--),shell使用雙破折號知識選項列表的結束,發現雙破只好後,指令碼就能夠安全的將剩餘的命令列引數作為引數而不是選項處理

檔名為 test16.sh

1 #!/bin/bash

2# extracting options and parameters34

while [ -n "$1"

]5do6

case"$1

"in7 -a) echo

"found the -a option";;

8 -b) echo

"found the -b option";;

9 -c) echo

"found the -c option";;

10 --) shift

11break ;;

12 *) echo

"$1 is not an option";;

13esac

14shift

15done

1617 count=1

18for param in

$@19

do20

echo

"parameter #$count: $param

"21 count=$[ $count + 1]22

done

這個指令碼使用break命令使得遇到雙破折號時從while迴圈中跳出,因為提前從迴圈中跳出,所以需要保證加入乙個shift命令將雙破折號從引數變數中丟棄

第乙個測試,嘗試使用普通選項和引數集執行指令碼

sh test16.sh -a -b -c test1 test2 test3

輸出為:

found the -a option

found the -b option

found the -c option

test1 is not an option

test2 is not an option

test3 is not an option

第二次測試,使用雙破折號將命令列中選項和引數分開

sh test16.sh -a -b -c -- test1 test2 test3

輸出結果為

found the -a option

found the -b option

found the -c option

parameter #

1: test1

parameter #

2: test2

parameter #

3: test3

這時可以看到輸出的結果中,因為識別到'--'符號,便跳出了while迴圈,然後使用下乙個迴圈中輸出剩下的變數

shift 造成引數變數號碼偏移

指令碼後面所接的變數是否能夠進行偏移 shift 呢?什麼是偏移啊?我們直接以底下的範例來說明好了,用範例說明比較好解釋!bin bash echo total parameter number is echo your whole parameter is echo e you ll shift ...

shift 造成引數變數號碼偏移

指令碼後面所接的變數是否能夠進行偏移 shift 呢?什麼是偏移啊?我們直接以底下的範例來說明好了,用範例說明比較好解釋!bin bash echo total parameter number is echo your whole parameter is echo e you ll shift ...

shift函式是對資料進行移動的操作

shift函式是對資料進行移動的操作,假如現在有乙個dataframe資料df,如下所示 dataframe.shift periods 1,freq none,axis 0 引數periods 型別為int,表示移動的幅度,可以是正數,也可以是負數,預設值是1,1就表示移動一次,注意這裡移動的都是...