Shell·學習筆記---(語法篇一)

· 條件測試
· 多條件測試
· if語句
· 條件嵌套
· ||和&&

# 條件測試 
# shell腳本中測試是通過命令來完成的
# 常見的測試命令包括test或[
# 聽過檢查該類命令的退出碼,決定條件測試是否成立
# 注意:shell中退出碼爲0表示測試條件成立,爲1表示不成立
 read myint
 test $myint -eq 100
 echo $?
# 測試類型
# 整數測試:-eq(=) -ne(!=) -lt(<) -gt(>) -le(<=) -gt(>=)
 read myint
 test $myint -eq 100
 echo $?
 [ $myint -ne 100 ]#此處一定注意語句和[]之間必須要有空格
 echo $?
# 字符串測試:== (=) != -z -n
 read mystring
 [ "X$mystring" == "Xhello" ]
 echo $?
 [ "X$mystring" != "Xhello" ]
 echo $?
 [ -z $mystring ] #是否爲空串
 echo $?
 [ -n $mystring ] #是否爲非空串
 echo $?
# 文件測試:-d -f -b -c
 [ -c /dev/tty ] #測試是否爲字符設備文件
 echo $?
 [ -b /dev/sda ] #測試是否爲塊設備文件
 echo $?
 [ -f ./shell2.sh ] #測試是否爲普通文件
 echo $?
 [ -d / ] #測試是否爲目錄
 echo $?
# test 或[ 可以測試一個條件是否成立,如果測試結果爲真
# 則該命令的退出碼爲0,爲假則退出碼爲1
# 使用[命令測試時,傳給命令的各參數之間應該用空格隔開
# test和[測試命令的參數形式是相同的
# 只不過[命令後面多了一個]參數 

# 多條件測試
# 邏輯反: !
 read mystring
 [ ! "X$mystring" == "Xhello" ]
 echo $?
# 邏輯與: -a   (and)
 printf "Enter data1: "
 read data1
 printf "Enter data2: "
 read data2
 [ $data1 -eq 100 -a $data2 -eq 200 ]
 echo $?
# 邏輯或:-o   (or)
 printf "Enter data1: "
 read data1
 printf "Enter data2: "
 read data2
 [ $data1 -eq 100 -o $data2 -eq 200 ]
 echo $?

# if語句
 printf "Enter string: "
 read string
 if [ "X$string" == "Xhello" ]
 then
     echo "get hello"
 fi
# 如果兩條命令卸載同一行則需要用;隔開
# 一行致謝一條命令就不需要寫;號
# then後面有換行,但這條命令沒寫完,shell會自動續行
# 把下一行接在then後面當做一條命令處理
# 和[命令一樣,要注意命令和個參數之間必須用空格隔開
 printf "Enter string: "
 read string
 if [ "X$string" == "Xhello" ];then
     echo "get hello"
 fi
# 條件嵌套
 printf "Enter data: "
 read data
 if [ $data -lt 100 ];then
     if [ $data -eq 50 ];then
         echo "data is eq than 50"
     elif [ $data -lt 50 ];then
         echo "data is lt than 50"
     else
         echo "data is gt than 50 and lt than 100"
     fi
 else
     echo "data is gt than 100"
 fi
# if命令的參數組成一條子命令,如果該子命令的退出碼
# 爲0則表示真,則執行then後面的子命令
# 如果非0則表示假,則執行elif,else或者fi後面的子命令
# if後面的子命令通常是測試命令,但也可以是其他命令
# 所以說,只要某個命令的退出碼爲0或者爲1來表名執行結果
# 該命令都可以放在if後
# 練習:檢測文件中是否含有222這樣的關鍵字
# 思路:用if進行條件判斷,直接判斷grep命令的執行結果
# -E:使用擴展正則匹配
# -q:使用安靜模式匹配
 printf "Enter filename: "
 read filename
 if grep -Eq '222' "$filename";then
     echo "yes"
 else
     echo "no"
 fi
# shell中沒有{}。所以用fi表示if語句塊的結束

# 空代碼塊
# 在shell中,如果我們在一個應該出現語句的地方
# 卻不需要任何語句執行任何事情,如果空下不寫語句
# 則shell就會報錯
 read myint
 if [ $myint -eq 100 ];then
 else
     echo "then後面是個空餘句"
 fi
# 解決辦法:用:   :是一個特殊的命令,稱爲空命令
# 該命令不做任何事情,但退出碼總是爲真
# 此外也可以執行/bin/true或/bin/false
# 得到真或者假的退出碼
 printf "Enter data: "
 read data
 if [ $data -eq 100 ];then
     false   # 這裏也可以用true/false命令代替
 else
     echo "data is ne than 100"
 fi

# ||和&&
# ||
 printf "Enter data1: "
 read data1
 [ $data1 -eq 100 ] && echo "yes"
 [ $data1 -eq 100 ] && {
     echo "yes"
 }
# &&
 printf "Enter data2: "
 read data2
 [ $data2 -eq 100 ] && echo "YES1"
 [ $data2 -eq 100 ] || {
     echo "YES2"
 }
# &&相當於if……then.而||相當於if not …… then.
# && 和 || 用於連接兩個命令,
# 而上面講的-a(邏輯與)和-o(邏輯或)僅用於
# 在測試表達式中連接兩個測試條件
# shell這裏的{}中包含的語句會在當前shell進程中執行
# 而()中包含的語句會創建新的shell進程執行
發佈了110 篇原創文章 · 獲贊 47 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章