Shell (八)

測試

測試結(jié)構(gòu)

  • 一個if/then結(jié)構(gòu)測試一列命令的退出狀態(tài)是否為0(因為依照慣例卸伞,0意味著命令執(zhí)行成功),如果是0則會執(zhí)行一個或多個命令娘香。
  • 有一個命令** [** ([左方括]是特殊字符). 它和test是同義詞,因為效率的原因苍狰,它被內(nèi)建在shell里。這個命令的參數(shù)是比較表達(dá)式或者文件測試烘绽,它會返回一個退出狀態(tài)指示比較的結(jié)果(0表示真淋昭,1表示假)。
  • [[]] 同樣是測試命令诀姚,是一個比較關(guān)鍵字响牛。
  • if 命令不僅能測試由方括號括起來的條件,也能測試任何命令。
root@ubuntu:/home/newer# if cmp 1.txt keepme &>/dev/null; then echo "same"; else echo "diffrent";fi
diffrent
root@ubuntu:/home/newer# if grep -r dog 1.txt &>/dev/null; then echo "dog"; fi
dog
root@ubuntu:/home/newer# if [$abc] &>/dev/null; then echo "uninitialized variable is true"; else echo "uninitailized variable is fause"; fi
uninitailized variable is fause
#!/bin/bash
 
 #  小技巧:
 #  如果你不確定某一條件怎么被求值,
 #+ 可以用一個if-test結(jié)構(gòu)來測試.
 
 echo
 
 echo "Testing \"0\""
 if [ 0 ]      # 0
 then
   echo "0 is true."
 else
   echo "0 is false."
 fi            # 0為真.
 
 echo
 
 echo "Testing \"1\""
 if [ 1 ]      # 1
 then
   echo "1 is true."
 else
   echo "1 is false."
 fi            # 1為真.
 
 echo
 
 echo "Testing \"-1\""
 if [ -1 ]     # -1
 then
   echo "-1 is true."
 else
   echo "-1 is false."
 fi            # -1為真.
 
 echo
 
 echo "Testing \"NULL\""
 if [ ]        # NULL (空條件)
 then
   echo "NULL is true."
 else
   echo "NULL is false."
 fi            # NULL為假.
 
 echo
 
 echo "Testing \"xyz\""
 if [ xyz ]    # 字符串
 then
   echo "Random string is true."
 else
   echo "Random string is false."
 fi            # 任意字符串為true.
 
 echo
 
 echo "Testing \"\$xyz\""
 if [ $xyz ]   # 變量$xyz為null值, 但...
               # 它只是一個未初始化的變量.
 then
   echo "Uninitialized variable is true."
 else
   echo "Uninitialized variable is false."
 fi            # 未初始化的變量為false.
 
 echo
 
 echo "Testing \"-n \$xyz\""
 if [ -n "$xyz" ]            # 進(jìn)一步實驗核實.
 then
   echo "Uninitialized variable is true."
 else
   echo "Uninitialized variable is false."
 fi            # 未始初化的變量為false.
 
 echo
 
 
 xyz=          # 已初始化, 但設(shè)置成null值.
 
 echo "Testing \"-n \$xyz\""
 if [ -n "$xyz" ]
 then
   echo "Null variable is true."
 else
   echo "Null variable is false."
 fi            # Null值變量為假.
 
 
 echo
 
 
 # 什么時候"false"為真?
 
 echo "Testing \"false\""
 if [ "false" ]              #  "false"是一個字符串.
 then
   echo "\"false\" is true." #+ 它被測試為真.
 else
   echo "\"false\" is false."
 fi            # "false"為真.
 
 echo
 
 echo "Testing \"\$false\""  # 再來呀打,未初始化的變量.
 if [ "$false" ]
 then
   echo "\"\$false\" is true."
 else
   echo "\"\$false\" is false."
 fi            # "$false"變量為假.
               # 現(xiàn)在, 我們?nèi)〉昧祟A(yù)期的效果.
 
 #  如果我們測試未初始化的變量"$true"會發(fā)生什么?
 
 echo
 
 exit 0

結(jié)構(gòu)

if [ condition1 ]
then
   command1
   command2
   command3
elif [ condition2 ]
# 和else if相同
then
   command4
   command5
else
   default-command
fi

等價的測試

#!/bin/bash

echo

if test -z "$1"
then
  echo "No command-line arguments."
else
  echo "First command-line argument is $1."
fi

echo

if /usr/bin/test -z "$1"      # 和內(nèi)建的"test"命令一樣.
then
  echo "No command-line arguments."
else
  echo "First command-line argument is $1."
fi

echo

if [ -z "$1" ]                # 和上面代碼塊的功能一樣
#   if [ -z "$1"                應(yīng)該來說會運行, 但是...
#+  Bash給出錯誤說少了一個封閉的右方括.
then
  echo "No command-line arguments."
else
  echo "First command-line argument is $1."
fi

echo


if /usr/bin/[ -z "$1" ]       # 同樣和上面的代碼塊一樣.
# if /usr/bin/[ -z "$1"       # 工作, 但還是給出一個錯誤信息.
#                             # 注意:
#                               這個已經(jīng)在bash 3.x版本被修補好了矢赁。
then
  echo "No command-line arguments."
else
  echo "First command-line argument is $1."
fi

echo

exit 0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贬丛,隨后出現(xiàn)的幾起案子撩银,更是在濱河造成了極大的恐慌,老刑警劉巖豺憔,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件额获,死亡現(xiàn)場離奇詭異,居然都是意外死亡恭应,警方通過查閱死者的電腦和手機抄邀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昼榛,“玉大人境肾,你說我怎么就攤上這事〉ㄓ欤” “怎么了奥喻?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長非迹。 經(jīng)常有香客問我环鲤,道長,這世上最難降的妖魔是什么憎兽? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任冷离,我火速辦了婚禮,結(jié)果婚禮上纯命,老公的妹妹穿的比我還像新娘酒朵。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布猛铅。 她就那樣靜靜地躺著筐咧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪真椿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天,我揣著相機與錄音碍粥,去河邊找鬼。 笑死黑毅,一個胖子當(dāng)著我的面吹牛嚼摩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼枕面,長吁一口氣:“原來是場噩夢啊……” “哼愿卒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起潮秘,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤琼开,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后枕荞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柜候,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年躏精,在試婚紗的時候發(fā)現(xiàn)自己被綠了渣刷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡矗烛,死狀恐怖辅柴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情高诺,我是刑警寧澤碌识,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站虱而,受9級特大地震影響筏餐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜牡拇,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一魁瞪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惠呼,春花似錦导俘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至泣崩,卻和暖如春少梁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背矫付。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工凯沪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人买优。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓妨马,卻偏偏與公主長得像挺举,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子烘跺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,666評論 2 350

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理湘纵,服務(wù)發(fā)現(xiàn),斷路器液荸,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 個人學(xué)習(xí)批處理的初衷來源于實際工作瞻佛;在某個迭代版本有個BS(安卓手游模擬器)大需求,從而在測試過程中就重復(fù)涉及到...
    Luckykailiu閱讀 4,706評論 0 11
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,149評論 2 34
  • Ubuntu的發(fā)音 Ubuntu适刀,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音煤蹭。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,215評論 9 467
  • 如果說2015年是胡歌年笔喉,那么2016年就是薛之謙年。僅僅上半年他就參加了十五個綜藝節(jié)目硝皂,四個節(jié)目里的常駐嘉...
    七分暖文閱讀 375評論 0 0