概述
今天主要介紹下shell腳本中shift的一些用法,這個命令還是相對比較少見的。
一、shift介紹
shift命令用于對參數(shù)的移動(左移),通常用于在不知道傳入?yún)?shù)個數(shù)的情況下依次遍歷每個參數(shù)然后進行相應(yīng)處理(常見于linux中各種程序的啟動腳本)。
簡而言之,shift命令表示參數(shù)向左偏移,后面可跟數(shù)字(數(shù)字大小在參數(shù)個數(shù)范圍內(nèi))
二、實驗
1、依次讀取輸入的參數(shù)并打印參數(shù)個數(shù):
#!/bin/bash while [ $# != 0 ];do echo "第一個參數(shù)為:$1,參數(shù)個數(shù)為:$#" shift done
輸出結(jié)果:
./run.sh a b c d e f
從上可知 shift(shift 1) 命令每執(zhí)行一次,變量的個數(shù)($#)減一
(之前的$1變量被銷毀,之后的$2就變成了$1),而變量值提前一位。
同理,shift n后,前n位參數(shù)都會被銷毀。
2、測試shift n
#!/bin/bash echo "參數(shù)個數(shù)為:$#,其中:" for i in $(seq 1 $#) do eval j=$$i echo "第$i個參數(shù)($"$i"):$j" done shift 3 echo "執(zhí)行shift 3操作后:" echo "參數(shù)個數(shù)為:$#,其中:" for i in $(seq 1 $#) do #通過eval把i變量的值($i)作為變量j的名字 eval j=$$i echo "第$i個參數(shù)($"$i"):$j" done
輸出結(jié)果:
./shift.sh a b c d e f