shell之shift

在 shell 編程中舱痘,shift 命令用于操作腳本參數(shù)蚕键。具體來(lái)說(shuō),shift 命令會(huì)左移位置參數(shù)衰粹,將 2 變?yōu)? mathimg=1,3 變?yōu)? mathimg=2笆怠,以此類推铝耻。原來(lái)的 $1 會(huì)被丟棄。這個(gè)命令在處理不定數(shù)量的參數(shù)時(shí)非常有用蹬刷。

基本用法
shift [n]
n 是一個(gè)可選參數(shù)瓢捉,表示左移的次數(shù)。如果未指定办成,默認(rèn)值為 1泡态。
示例
假設(shè)你有一個(gè)腳本 example.sh,內(nèi)容如下:

#!/bin/bash

echo "Initial parameters: $@"

shift

echo "After one shift: $@"

shift 2

echo "After two more shifts: $@"

假設(shè)你運(yùn)行這個(gè)腳本并傳遞一些參數(shù):

./example.sh arg1 arg2 arg3 arg4 arg5
輸出將會(huì)是:

Initial parameters: arg1 arg2 arg3 arg4 arg5
After one shift: arg2 arg3 arg4 arg5
After two more shifts: arg4 arg5
處理不定數(shù)量的參數(shù)
shift 命令在處理不定數(shù)量的參數(shù)時(shí)非常有用迂卢。下面是一個(gè)示例腳本某弦,演示如何使用 shift 來(lái)處理所有傳遞的參數(shù):

#!/bin/bash

while [ "$#" -gt 0 ]; do
  echo "Processing parameter: $1"
  shift
done
運(yùn)行這個(gè)腳本:

./example.sh param1 param2 param3
輸出將會(huì)是:

Processing parameter: param1
Processing parameter: param2
Processing parameter: param3

使用 shift 處理選項(xiàng)和參數(shù)
你可以結(jié)合 shift 和 case 語(yǔ)句來(lái)處理腳本的選項(xiàng)和參數(shù)。下面是一個(gè)示例腳本而克,演示如何處理選項(xiàng)和參數(shù):

#!/bin/bash

while [ "$#" -gt 0 ]; do
  case "$1" in
    -a|--option-a)
      echo "Option A selected"
      shift
      ;;
    -b|--option-b)
      echo "Option B selected, argument: $2"
      shift 2
      ;;
    *)
      echo "Unknown option: $1"
      shift
      ;;
  esac
done

運(yùn)行這個(gè)腳本:

./example.sh -a -b value arg1 arg2
輸出將會(huì)是:

Option A selected
Option B selected, argument: value
Unknown option: arg1
Unknown option: arg2
function main (){
  while [[ $# -gt 0 ]]; do
    key="$1"

    case $key in
      -v|--version)
        VERSION="$2"
        shift
        ;;
      -o|--output)
        CVESSEL_SNAPSHOT_DIR="$2"
        shift
        ;;
      *)
        echo "無(wú)效的選項(xiàng): $key"
        usage
        exit 1
        ;;
    esac
    shift
  done

  # 檢查 -v 參數(shù)是否存在
  if [ -z "$VERSION" ]; then
    echo "錯(cuò)誤:缺少 -v 參數(shù)"
    usage
    exit 1
  fi
}

function clean_file() {
  local file=$1
  if [ -f "$file" ]; then
    sed -i '/^#/d;/^$/d' "$file"
    echo "Cleaned $file"
  else
    echo "Error: $file does not exist"
  fi
}

總結(jié)
shift 命令用于左移位置參數(shù)靶壮。
默認(rèn)情況下,shift 左移一次员萍,可以指定一個(gè)參數(shù)來(lái)左移多次腾降。
shift 在處理不定數(shù)量的參數(shù)和選項(xiàng)時(shí)非常有用。
通過(guò)使用 shift碎绎,你可以更加靈活地處理腳本參數(shù)螃壤,編寫(xiě)更加通用和可復(fù)用的腳本。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末筋帖,一起剝皮案震驚了整個(gè)濱河市奸晴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌幕随,老刑警劉巖蚁滋,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異赘淮,居然都是意外死亡辕录,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)梢卸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)走诞,“玉大人,你說(shuō)我怎么就攤上這事蛤高◎己担” “怎么了碑幅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)塞绿。 經(jīng)常有香客問(wèn)我沟涨,道長(zhǎng),這世上最難降的妖魔是什么异吻? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任裹赴,我火速辦了婚禮,結(jié)果婚禮上诀浪,老公的妹妹穿的比我還像新娘棋返。我一直安慰自己,他們只是感情好雷猪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布睛竣。 她就那樣靜靜地躺著,像睡著了一般求摇。 火紅的嫁衣襯著肌膚如雪射沟。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天月帝,我揣著相機(jī)與錄音躏惋,去河邊找鬼。 笑死嚷辅,一個(gè)胖子當(dāng)著我的面吹牛簿姨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播簸搞,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼扁位,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了趁俊?” 一聲冷哼從身側(cè)響起域仇,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寺擂,沒(méi)想到半個(gè)月后暇务,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡怔软,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年垦细,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挡逼。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡括改,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出家坎,到底是詐尸還是另有隱情嘱能,我是刑警寧澤吝梅,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站惹骂,受9級(jí)特大地震影響苏携,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜对粪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一兜叨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧衩侥,春花似錦、人聲如沸矛物。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)履羞。三九已至峦萎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忆首,已是汗流浹背爱榔。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糙及,地道東北人详幽。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像浸锨,于是被迫代替她去往敵國(guó)和親唇聘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • shift命令用于對(duì)參數(shù)的移動(dòng)(左移)柱搜,通常用于在不知道傳入?yún)?shù)個(gè)數(shù)的情況下依次遍歷每個(gè)參數(shù)然后進(jìn)行相應(yīng)處理(常見(jiàn)...
    codeMan_6616閱讀 10,536評(píng)論 2 1
  • Python是面向?qū)ο蟠险海呒?jí)語(yǔ)言宪肖,解釋,動(dòng)態(tài)和多用途編程語(yǔ)言健爬。Python易于學(xué)習(xí)控乾,而且功能強(qiáng)大,功能多樣的腳本語(yǔ)...
    python阿喵閱讀 430評(píng)論 0 0
  • 1.創(chuàng)建文件夾 !/bin/sh mkdir -m 777 "%%1" 2.創(chuàng)建文件 !/bin/sh touch...
    BigJeffWang閱讀 10,051評(píng)論 3 53
  • bash的配置文件 用戶登錄系統(tǒng)后浑劳,會(huì)啟動(dòng)一個(gè)接口程序阱持,也稱shell程序,一般默認(rèn)是bash魔熏,而這個(gè)程序的啟動(dòng)衷咽,...
    SRE1閱讀 2,503評(píng)論 0 1
  • 變量 變量 變量引用:$ 和 ${} 命令替換 命令輸出中提取信息鸽扁,并將其賦給變量反引號(hào) 和 $()wu=`...
    wuzsheng閱讀 136評(píng)論 0 0