Shell腳本之——條件語句if詳解


一、test命令

1、格式

測試表達式是否成立,若成立返回0,否則返回其他數值。

格式1:	test 條件表達式
格式2:	[ 條件表達式 ]

2、實例操作

二、文件測試

1、格式:

操作符 文件名或者目錄名  

2、常用的測試操作符

-d∶ 測試是否為目錄(Directory)
-e∶ 測試目錄或文件是否存在(Exist)
-f∶ 測試是否為文件(File)
-r∶ 測試當前用戶是否有權限讀取(Read)
-w∶ 測試當前用戶是否有權限寫入(Write)
-x∶測試當前用戶是否有權限執行(eXcute)
-L∶測試是否為軟鏈接文件

3、實例操作

 

三、整數值比較

1、格式

[ 整數1 操作符 整數2 ]

2、.常用的測試操作符

-eq∶ 等於(Equal)
-ne∶ 不等於(Not Equal)
-gt∶ 大於(Greater Than)
-lt∶ 小於(Lesser Than)
-le∶ 小於或等於(Lesser or Equal)·
-ge∶ 大於或等於(Greater or Equal)

3、實例操作

3.1 結合邏輯與進行查詢當前目錄下的文件數目

  

3.2  查看系統內存是否低於或者高於1024M,如果滿足條件則提示

 

3.3  使用雙括號加數字進行表示

四、字符串比較

1、格式

[ 字符串1 = 字符串2 ] 			#判斷是否相等
[ 字符串1 != 字符串2 ] 			#判斷是否不等
[ -z 字符串 ] #是否空值
[ -n 字符串 ] # 字符集是否存在

2.常用的測試操作符

  • =∶ 字符串內容相同
  • !=∶ 字符串內容不同,!號表示相反的意思
  • z∶字符串內容為空

3、實例操作

  

 

五、邏輯測試(三元運算符)

1、格式

格式1∶	[ 表達式1 ] 操作符 [ 表達式2 ]…
格式2∶	命令1 操作符 命令2…

2、常用的測試操作符

  • -a或&&∶ 邏輯與,"而且"的意思
  • -o或||∶ 邏輯或,"或者"的意思
  • !∶邏輯否

3、實例操作一

 

4、實例操作二

 

#!/bin/bash
#Ping test

ping -c 3 -i 0.5 -w 2 $1 &> /dev/null && echo "$1 is online!" || echo "$1 is offline!"

 

  

 

六、if語句

1、 單分支結構

如果只有一個判斷式要進行,那么我們可以使用單分支的if語句

1.1 格式

if [ 條件判斷式 ]; then
	當條件判斷成立時,可以進行的命令工作內容
fi 					#這里將if反過來寫,結束if語句的意思

1.2 原理圖:

  

  

1.3 實例操作

2、雙分支結構

 在同一個數據的判斷中,如果該數據需要進行兩種不同的判斷,我們就需要雙分支if語句了:

2.1 格式

if [ 條件判斷式 ]; then
	當條件判斷成立時,可以進行的命令工作內容
else	
	當條件判斷不成立時,可以進行的命令工作內容
fi 		

2.2 原理圖:

  

2.3 實例操作一

 

2.4 實例操作二

 

#!/bin/bash
#Shut down httpd service

netstat -natp | grep :80 &> /dev/null

if [ $? -eq 0 ];then
   echo "httpd 服務正常運行!"
else
   echo "httpd 服務未開啟,正在開啟服務......"
   systemctl start httpd && echo "httpd 服務啟動成功"
fi

 

  

 

3、多分支結構

如果數據需要進行多種不同的判斷,則可以使用多分支結構

3.1 格式

if [ 條件判斷式 ]; then
	當條件判斷成立時,可以進行的命令工作內容
elif [ 條件判斷式二 ]; then
	當條件判斷成立時,可以進行的命令工作內容
else	
	當上面的條件判斷都不成立時,可以進行的命令工作內容
fi 		

3.2 原理圖:

  

 3.3 實例操作

 

 

七、case語句結構

 1.格式:

case 變量名稱 in
“第一個變量內容”
	程序段
	;;
“第二個變量內容”
	程序段
	;;
*)
	不包含第一個變量內容與第二個變量內容的其他程序執行段
	默認程序段
	;;
esac		

2、 實例操作一  

 

#!/bin/bash
#Determine grades and scores

read -p "請輸入你的分數(0-100):" score

[ $score -ge 90 -a $score -le 100 ] && a="great"
[ $score -ge 70 -a $score -le 89 ] && a="medium"
[ $score -ge 60 -a $score -le 69 ] && a="pass"
[ $score -lt 60 ] && a="fail"

case $a in
great)
   echo "優秀"
;;
medium)
   echo "中等"
;;
pass)
   echo "及格"
;;
fail)
   echo "不及格"
;;
*)
  echo "輸入有誤"
esac

 

  

 

3、實例操作二

#!/bin/bash
#Determine Input

read -p "請輸入一個字符:" string

case "$string" in
[a-z]|[A-Z])
    echo "你輸入的是字母"
;;
[0-9])
   echo "你輸入的是數字"
;;
*)
   echo "你輸入的是其他字符"
esac

  

八、總結

1、test命令:

兩種格式

test 條件表達式

[條件表達式]

2、文件測試

-d -e -f  -r -w -L

3、整數值比較

-eq -ge -le -gt -lt -ne

4、字符串比較

相等=

不相等  !=

空值 -z

是否存在 -n

5、邏輯測試

邏輯與:-a 或者&&

邏輯或:-o 或者||

邏輯否:!

6、if語句

單分支

雙分支

多分支

 

當 if 語句中使用 [ ] 條件修飾符時, $flag 變量必須加上引號。

 

當 if 語句中使用 [[]] 條件修飾符時,$flag 變量的引號可有可無。

 

7、case語句

多分支結構


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM