【linux編程】生信編程-shell腳本編程-if條件語句

shell編程

if 條件語句

If 條件語句主要有三中形式:

  • if...then…fi,
  • if…then…else…fi
  • if…then…elif…then…else…fi

1. if…then…fi 語法:

if 條件 
then     
   條件判斷成立時執(zhí)行的語句 
fi

這里的條件通常是一個條件測試命令 ,當條件為真 (執(zhí)行命令的退出狀態(tài)為0) 時執(zhí)行 then 后面的語句忠蝗;其也可以為一個普通的命令,當執(zhí)行命令的退出狀態(tài)為 0 時執(zhí)行 then 后面的語句。then 可以寫在 if 的 '條件' 后面,以分號相隔迹卢,也可以另起一行直接寫绊袋,語句必須以 fi 結(jié)束蟋恬,

例子


if echo "Hello" 
then    
    echo "world" 
fi 

str='/usr/bin/perl' 
if grep -q 'perl' "$str"; then    
    echo "I found perl in string '$str'" 
fi 

if [ 2 > 1 ]; then   
    echo "2 is bigger than 1" 
fi

2. if…then…else…fi 語法:

if 條件 
then
    條件判斷成立時執(zhí)行的語句 
else
    條件判斷不成立時執(zhí)行的語句 
fi

當 if 條件為真時執(zhí)行 then 后面的語句;當 if 條件為假時執(zhí)行 else 后面的語句涡尘,同樣語句必須以 fi 結(jié)束

例子

a=100 
b=99 
if [[ -n $a && -n $b ]]; 
then
    if test $a -ge $b; then
        echo "a ($a) is bigger than b ($b)"
    else 
        echo "a ($a) is smaller than b ($b)"
    fi
fi

執(zhí)行腳本得到結(jié)果: a (100) is bigger than b (99)


3. if…then…elif…then…else…fi

if 條件 
then
    (if) 條件判斷成立時執(zhí)行的語句 
elif 條件 
then
    (elif) 條件判斷成立時執(zhí)行的語句 
else
    (if 與 elif) 條件判斷都不成立時執(zhí)行的語句 
fi

語句必須以 fi 結(jié)束忍弛。可以把 fi 記成 if 的顛倒考抄,if...fi 閉合后才形成完整的 if 語句细疚。

例子

#!/bin/bash
set -e 
set -u 
if [[ -x example.sh ]]; then
    echo "The file 'example.sh' exists and is executable" 
elif [[ -f example.sh ]]; then
    echo "The file 'example.sh' exists but is not executable" 
else
    echo "The file 'example.sh' does not exist" 
fi

另存腳本為example3-3.sh,執(zhí)行腳本川梅;執(zhí)行 touch example.sh 后執(zhí)行腳本疯兼;執(zhí)行 chmod +x example.sh 后再次執(zhí)行腳本,將得到以下結(jié)果:


條件判斷之 test, [] 與 [[]]

這三個命令都屬于 shell 里面的條件測試命令贫途,條件判斷的返回狀態(tài)為 0 (真) 或者 1 (假)吧彪,if 基于條件測試返回的結(jié)果來決定如何執(zhí)行下面的代碼。

需要注意的是 [ ] 與 [[ ]] 也是命令!

故成對方括號之間的內(nèi)容可以理解為條件測試的參數(shù)丢早,根據(jù)我們前面講過的原則姨裸,參數(shù)之間要以空格分割秧倾,所以在寫條件判斷時一定要注意:**用空格分割參數(shù)! **

1. 整數(shù)和字符串比較操作符:

  • 操作符 描述
  • -z str 字符串為空為真
  • -n str 字符串為非空為真
  • = 兩個字符串相同為真
  • != 兩個字符串不同為真
  • -eq 操作對象的值相等為真
  • -ne 操作對象的值不等為真
  • -gt 左面的值大于右面的值為真
  • -lt 左面的值小于右面的值為真
  • -ge 左面的值大于等于右面的值為真
  • -le 左面的值小于等于右面的值為真

2. 文件和目錄測試操作符

常用的文件測試操作符有:

  • 操作符 描述
  • -f 測試文件是否為常規(guī)文件
  • -e 測試文件是否存在
  • -d 測試文件是否為目錄
  • -r 測試文件是否可讀
  • -w 測試文件是否可寫
  • -x 測試文件是否可執(zhí)行

3. 邏輯操作符:

  • 邏輯操作符 && (所有條件都符合為真)
  • || (其中一個條件符合即為真)
  • ! (不符合條件為真)

4. 正則表達比較操作符 (=~)

  • 通配符 描述
  • ^ 匹配行的開始
  • $ 匹配行的結(jié)束
  • . 匹配任意一個字符
    • 匹配零次或多次前面的單元/字符 *
  • 傀缩? 匹配零次或1次前面的單元/字符
    • 匹配1次或者多次前面的單元/字符 +
  • \n 匹配換行符
  • \t 匹配制表符
  • \s 匹配空格
  • \w 匹配字母數(shù)字下劃線
  • \d 匹配數(shù)字

條件語句使用技巧

  • 務必記得用 fi 來封閉 if 語句
  • 在使用新的關(guān)鍵詞 (如 then else 等) 時那先,記得另起一行或者用 ';' 分割。
  • 在條件判斷中使用變量時扑毡,我們最好用雙引號將變量引起來胃榕,以減少錯誤的產(chǎn)生。
  • 在 [] 或 [[ ]] 是命令瞄摊,記得其中的參數(shù)之間需要加空格勋又。
  • test 和 [ ] 完全相同,但 [[ ]] 是它們的加強版本换帜,在不想了解細節(jié)的情況下楔壤,推薦使用 [[ ]] 進行條件判斷。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惯驼,一起剝皮案震驚了整個濱河市蹲嚣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌祟牲,老刑警劉巖隙畜,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異说贝,居然都是意外死亡议惰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門乡恕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來言询,“玉大人,你說我怎么就攤上這事傲宜≡撕迹” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵函卒,是天一觀的道長辆憔。 經(jīng)常有香客問我,道長报嵌,這世上最難降的妖魔是什么躁愿? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮沪蓬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘来候。我一直安慰自己跷叉,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著云挟,像睡著了一般梆砸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上园欣,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天帖世,我揣著相機與錄音,去河邊找鬼沸枯。 笑死日矫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的绑榴。 我是一名探鬼主播哪轿,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼翔怎!你這毒婦竟也來了窃诉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤赤套,失蹤者是張志新(化名)和其女友劉穎飘痛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體容握,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡宣脉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了唯沮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脖旱。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖介蛉,靈堂內(nèi)的尸體忽然破棺而出萌庆,到底是詐尸還是另有隱情,我是刑警寧澤币旧,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布践险,位于F島的核電站,受9級特大地震影響吹菱,放射性物質(zhì)發(fā)生泄漏巍虫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一鳍刷、第九天 我趴在偏房一處隱蔽的房頂上張望占遥。 院中可真熱鬧,春花似錦输瓜、人聲如沸瓦胎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搔啊。三九已至柬祠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間负芋,已是汗流浹背漫蛔。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留旧蛾,地道東北人莽龟。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像蚜点,于是被迫代替她去往敵國和親轧房。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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

  • 基礎(chǔ)命令 主要的命令和快捷鍵 Linux系統(tǒng)命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,088評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理绍绘,服務發(fā)現(xiàn)奶镶,斷路器,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 1 概述 編寫shell腳本捺信,一般離不開條件選擇,條件判斷以及循環(huán)語句欠痴。掌握這三個語法迄靠,將大大提高腳本的編寫效率,...
    ghbsunny閱讀 1,583評論 0 0
  • 時間:2017-10-22星期日早上6點鐘 地點方式:微信語音 會議記錄:劉雙雙 時間郎:宋蔚 參會人員分享排序:...
    一點點媽媽閱讀 281評論 0 0
  • 就像她的咖啡店 就像她的茅草屋 就像她的暖暖的小家 就像你和我一樣的心情 世界這么大喇辽,每個人都有自己的渴望掌挚,我沒有...
    PERFEI閱讀 141評論 0 1