chapter 12.使用結(jié)構(gòu)化命令

if-then

if cmdLine
then
    echo "Run the cmd"
fi

或者:

if cmdLine; then
    echo "Run the cmd"
fi
  • bash shell的if語句會(huì)執(zhí)行if后面的命令(不是表達(dá)式),如果該命令退出狀態(tài)碼為0,位于then部分的命令就會(huì)執(zhí)行

if-then-else

if cmdLine; then
    cmdLine
else
    cmdLine
fi

if-then-elif-then-else-fi

if cmdLine; then
    cmd
elif cmd; then
    cmd
else
    cmd
fi

test || []

test condition
  • 由于if只能判斷命令退出狀態(tài)碼琼讽,若對(duì)于退出狀態(tài)碼之外的條件,需要test命令進(jìn)行測試吩屹,通常結(jié)構(gòu)為:

      if test condition; then
          cmd1
      else
          cmd2
      fi
    
  • 如果不寫test后面的condition斋竞,test會(huì)以非零的退出狀態(tài)碼退出,并執(zhí)行else中的cmd2

  • 測試變量是否有內(nèi)容啥刻,可以通過test $varTest奸鸯,未包含內(nèi)容返回false

  • bash shell中提供另一種方法——[],使用方括號(hào)包圍condition來進(jìn)行測試:

      if [ condition ]; then
          cmd1
      else
          cmd2
      fi
    
  • 注意:左方括號(hào)右側(cè)與右方括號(hào)左側(cè)必須有空格

  • test命令可以判斷三類條件:

    • 數(shù)值比較
    • 字符串比較
    • 文件比較
數(shù)值比較
n1 -eq n2
n1 -gt n2
n1 -lt n2
n1 -ne n2
n1 -le n2
  • 數(shù)值比較采用英文字符來表述比較符
  • bash shell只能處理整數(shù)可帽,不能進(jìn)行浮點(diǎn)數(shù)比較
字符串比較
str1 = str2
str1 != str2
str1 < str2
str1 > str2
-n str1 檢查str1的長度是否非0
-z str1 檢查str1長度是否為0
  • ><必須轉(zhuǎn)義為\>娄涩、\<,若不轉(zhuǎn)義映跟,則將><當(dāng)做輸入輸出重定向符號(hào):

      if [ str1 \> str2 ]; then
      ...
    
  • 大于和小于的順序與sort命令方式不同钝满,主要體現(xiàn)在sort命令處理大寫字母的方法跟test命令相反。在test中申窘,大寫字母被認(rèn)為小于小寫字母弯蚜,因?yàn)?code>test是根據(jù)標(biāo)準(zhǔn)的ASCII順序,sort是根據(jù)本地化設(shè)置中的順序剃法,英語環(huán)境中碎捺,小寫小于大寫字母。

文件比較
-d file 檢查file是否存在并為一個(gè)目錄
-e file 檢查file是否存在
-f file 檢查file是否存在并為一個(gè)文件
-r file 檢查file是否存在并可讀
-s file 檢查file是否存在并非空
-w file 檢查file是否存在并可寫
-x file 檢查file是否存在并可執(zhí)行
-O file 檢查file是否存在并屬于當(dāng)前用戶所有
-G file 檢查file是否存在并且默認(rèn)組與當(dāng)前用戶相同
file1 -nt file2 檢查file1是否比file2新(new than)
file1 -ot file2 檢查file1是否比file2舊(old than)
復(fù)合條件測試
[ condition1 ] || [ condition2 ]
[ condition1 ] && [ condition2 ]
  • 使用布爾邏輯來組合測試

if-else其他高級(jí)特性

雙括號(hào)
(( expression ))

主要用于高級(jí)數(shù)學(xué)表達(dá)式計(jì)算贷洲,expression可以為:

val++
val--
++val
--val
! 邏輯求反
~  位求反
** 冪運(yùn)算
<< 左位移
>> 右位移
& 位布爾且
| 位布爾或
&& 邏輯且
|| 邏輯或

使用方法為:

if (( $var1 ** 2 > $var2 )); then
...

另外:在雙括號(hào)中大于收厨、小于號(hào)不需要轉(zhuǎn)義

雙方括號(hào)
[[ expression ]]

主要用于字符串比較,expression使用test命令中采用的標(biāo)準(zhǔn)字符串比較优构,即ASCII碼比較诵叁,但它提供了另一個(gè)特性——模式匹配(pattern matching),例如:

if [[ $USER == franc* ]]; then
...

==將右邊的字符串franc*視作一個(gè)模式钦椭,并啟用模式匹配規(guī)則拧额,判斷$USER變量中是否以franc開頭碑诉,如果是,執(zhí)行then后面的cmd

case

case variable in
pattren1 | pattern2) cmd1; ;
pattren3) cmd2; ;
*) defaultCmd3; ;
esac
  • 注意括號(hào)格式與末尾分號(hào)格式
  • |
  • *默認(rèn)值

參考文章

Linux Command Line and Shell Scripting Bible
該系列其他文章請查看:
Linux命令行與shell腳本

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侥锦,一起剝皮案震驚了整個(gè)濱河市进栽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恭垦,老刑警劉巖快毛,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異番挺,居然都是意外死亡唠帝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門玄柏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來没隘,“玉大人,你說我怎么就攤上這事禁荸∮移眩” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵赶熟,是天一觀的道長瑰妄。 經(jīng)常有香客問我,道長映砖,這世上最難降的妖魔是什么间坐? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮邑退,結(jié)果婚禮上竹宋,老公的妹妹穿的比我還像新娘。我一直安慰自己地技,他們只是感情好蜈七,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著莫矗,像睡著了一般飒硅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上作谚,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天三娩,我揣著相機(jī)與錄音,去河邊找鬼妹懒。 笑死雀监,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的眨唬。 我是一名探鬼主播会前,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼好乐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了回官?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤搂橙,失蹤者是張志新(化名)和其女友劉穎歉提,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體区转,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苔巨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了废离。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侄泽。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蜻韭,靈堂內(nèi)的尸體忽然破棺而出悼尾,到底是詐尸還是另有隱情,我是刑警寧澤肖方,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布闺魏,位于F島的核電站,受9級(jí)特大地震影響俯画,放射性物質(zhì)發(fā)生泄漏析桥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一艰垂、第九天 我趴在偏房一處隱蔽的房頂上張望泡仗。 院中可真熱鬧,春花似錦猜憎、人聲如沸娩怎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峦树。三九已至,卻和暖如春旦事,著一層夾襖步出監(jiān)牢的瞬間魁巩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工姐浮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谷遂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓卖鲤,卻偏偏與公主長得像肾扰,于是被迫代替她去往敵國和親畴嘶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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