Shell (八)

測試

測試結構

  • 一個if/then結構測試一列命令的退出狀態是否為0(因為依照慣例,0意味著命令執行成功),如果是0則會執行一個或多個命令。
  • 有一個命令** [** ([左方括]是特殊字符). 它和test是同義詞,因為效率的原因,它被內建在shell里。這個命令的參數是比較表達式或者文件測試,它會返回一個退出狀態指示比較的結果(0表示真,1表示假)。
  • [[]] 同樣是測試命令,是一個比較關鍵字。
  • 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結構來測試.
 
 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" ]            # 進一步實驗核實.
 then
   echo "Uninitialized variable is true."
 else
   echo "Uninitialized variable is false."
 fi            # 未始初化的變量為false.
 
 echo
 
 
 xyz=          # 已初始化, 但設置成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"變量為假.
               # 現在, 我們取得了預期的效果.
 
 #  如果我們測試未初始化的變量"$true"會發生什么?
 
 echo
 
 exit 0

結構

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"      # 和內建的"test"命令一樣.
then
  echo "No command-line arguments."
else
  echo "First command-line argument is $1."
fi

echo

if [ -z "$1" ]                # 和上面代碼塊的功能一樣
#   if [ -z "$1"                應該來說會運行, 但是...
#+  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"       # 工作, 但還是給出一個錯誤信息.
#                             # 注意:
#                               這個已經在bash 3.x版本被修補好了。
then
  echo "No command-line arguments."
else
  echo "First command-line argument is $1."
fi

echo

exit 0
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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