shell指令碼中shift的用法說明

2021-10-04 02:46:51 字數 1366 閱讀 1836

shift命令用於對引數的移動(左移),通常用於在不知道傳入引數個數的情況下依次遍歷每個引數然後進行相應處理(常見於linux中各種程式的啟動指令碼)。

示例1:依次讀取輸入的引數並列印引數個數:

run.sh:

#!/bin/bash

while

[ $# != 0 ];do

echo

"第乙個引數為:$1,引數個數為:$#"

shift

done

輸入如下命令執行:$run.sh a b c d e f

結果顯示如下:

第乙個引數為:a,引數個數為:6

第乙個引數為:b,引數個數為:5

第乙個引數為:c,引數個數為:4

第乙個引數為:d,引數個數為:3

第乙個引數為:e,引數個數為:2

第乙個引數為:f, 引數個數為:1

從上可知 shift(shift 1) 命令每執行一次,變數的個數($#)減一(之前的$1變數被銷毀,之後的$2就變成了$1),而變數值提前一位。

同理,shift n後,前n位引數都會被銷毀,比如:

輸入5個引數:abcd e

那麼$1=a,$2=b,$3=c,$4=d,$5=e,執行shift 3操作後,前3個引數a、b、c被銷毀,就剩下了2個引數:d,e(這時d=$1,e=$2,其中d由$4—>$1,e由$5—>$2),參考示例如下:

示例2:

#!/bin/bash

echo

"引數個數為:$#,其中:"

for i in

$(seq 1 $#)

doeval j=\$$i

echo

"第$i個引數($"

$i"):$j"

done

shift 3

echo

"執行shift 3操作後:"

echo

"引數個數為:$#,其中:"

for i in

$(seq 1 $#)

do#通過eval把i變數的值($i)作為變數j的名字

eval j=\$$i

echo

"第$i個引數($"

$i"):$j"

done

輸出結果為:

引數個數為:5,其中:

第1個引數($1):a

第2個引數($2):b

第3個引數($3):c

第4個引數($4):d

第5個引數($5):e

執行shift 3操作後:

引數個數為:2,其中:

第1個引數($1):d

第2個引數($2):e

Linux shell指令碼中shift的用法說明

原文 shift命令用於對引數的移動 左移 通常用於在不知道傳入引數個數的情況下依次遍歷每個引數然後進行相應處理 常見於linux中各種程式的啟動指令碼 示例1 依次讀取輸入的引數並列印引數個數 run.sh bin bash while 0 do echo 第乙個引數為 1,引數個數為 shift...

Linux shell指令碼中shift的用法說明

shift命令用於對引數的移動 左移 通常用於在不知道傳入引數個數的情況下依次遍歷每個引數然後進行相應處理 常見於linux中各種程式的啟動指令碼 示例1 依次讀取輸入的引數並列印引數個數 run.sh bin bash while 0 do echo 第乙個引數為 1,引數個數為 shift do...

shell 指令碼中 , , 和shift

的區別 0 這個程式的執行名字 n 這個程式的第n個引數值,n 1.9 這個程式的所有引數,此選項引數可超過9個。這個程式的引數個數 這個程式的pid 指令碼執行的當前程序id號 執行上乙個背景指令的pid 後台執行的最後乙個程序的程序id號 執行上乙個指令的返回值 顯示最後命令的退出狀態。0表示沒...