Shell腳本應用(2)
條件測試操作:
使用test命令操作
格式:test 條件表達式
或者:
[ 條件表達式 ]//注意,左右兩邊至少得有一個空格
1.文件測試
-d:測試是否爲目錄
-e:是否存在
-f:是否爲文件
-r:測試當前用戶是否有讀取權限
-w:測試當前用戶是否有寫入權限
-x:測試是否設置有可執行權限
例:測試目錄是否存在,$?返回來的值爲0表示正常,非0表示命令不正常
爲了更直觀的查看測試結果,可以結合命令分隔符“&&”和echo命令一起使用,當命令成立時直接輸入“yes”。”&&”表示而且的意思
例:
2.整數值比較
-eq:等於
-ne:不等於
-le:小於或等於
-ge:大於或等於
-gt:大於
-lt:小於
例如:
若要判斷當前可用的空閒內存大小,當低於1024MB時輸出具體數值,可以執行以下操作。其中“free –m”命令表示以MB爲單位輸出內存信息,提取的空閒內存數值通過命令替換賦值給變量cache
或者:
3.字符串比較
=:第一個字符串與第二個字符串相同
!=:第一個字符串與第二個字符串不相同,其中“!”爲取反的意思
-z:檢查字符串是否爲空。對於未定義的值將視爲空串
擴展一下:>1.txt可以清空1.txt裏的內容,如果沒有則可以創建1.txt文件
例:
例如:若要判斷當前系統的語言環境,當發現不是“en.us”時輸出信息
4.邏輯測試
邏輯測試指的是判斷兩個或多個條件之間的依賴關係。
&&邏輯與,表示而且的意思。只有當前後兩個條件都成立時,返回的值才爲0、使用test命令測試時,&&可改寫爲–a
||邏輯或:表示或者,只要前後兩個條件有一個成立時,整個測試命令的返回值爲0.使用test測試命令,可將||改寫爲-o
!邏輯否,表示不的意思,只有當指定的條件不成立時,整個測試命令的返回值才爲0
例如:若要判斷當前linux系統的內核版本是否大於2.4。可以執行以下操作
使用if條件語句
1單分支的if結構
if語句的分支指的是不同測試結果所對應的執行語句(一條或多條)。對於單分支來說,只有在條件成立時纔會執行相應的代碼。否則不做任何操作。語法格式如下:
if 條件測試操作
then
命令序列
fi
2.雙分支的if結構
對於雙分支的選擇結構來說,要求針對“條件成立”“條件不成立“兩種情況針對不同的操作,雙分支的語法如下:
if 條件測試語句
then
命令序列1
else
命令序列2
fi
雙分支if結構的執行流程:首先判斷條件測試操作的結果,如果條件成立,則執行then後面的命令,忽略else及後面的命令序列2,直到if結束判斷,如果條件不成立,則忽略then及後面的命令序列1,直接跳至else後面的命令序列2執行。直到if結束判斷
3.多分支的if語句
由於if語句可以根據測試結果的成立,不成立分別執行操作,所以能夠嵌套使用,進行多次判斷。語法使用“
if 條件測試操作1
then
命令序列1
elif 條件測試操作2
then
命令序列2
else
命令序列 3
fi
多分支的if結構的執行流程:首先判斷條件測試操作1的結果,如果條件1成立,則執行命令序列1,然後跳至if結束判斷。如果條件1不成立,則繼續判斷條件測試操作2的結果,如果條件測試2成立,則執行命令序列2,然後跳至if結束判斷….如果所有的條件都不滿足,則執行else後面的命令序列n,直到遇見fi結束判斷
1.單分支if語句應用
例題:
很多linux用戶習慣上將光盤掛載到/media/cdrom下,但是linux 5.5系統默認沒有建立此目錄,若需要在shell腳本中執行掛載光盤的操作,默認先判斷掛載點目錄是否存在,若不存則新建此目錄
或者
在例如:在linux下有很多命令普通用戶不能直接執行,這個是直接測試當前登錄的用戶是否爲root用戶的
2.雙分支if語句應用
雙分支if語句只是在單分支的基礎上針對“條件不成立“的情況執行另一種操作,而不是”坐視不管“的不做任何操作。
例如:若要編寫一個連通性測試腳本pinghost.sh,通過位置參數$1提供目標主機地址,然後根據ping檢測結果給出相應提示,如下:
//在上述腳本代碼中,爲了提高ping命令的測試效率,使用了-c ,-I ,-w選項分別指定只發送三個測試包。間隔0.2s,超時時間爲3s、另外/dev/null相當於一個回收站。不會回顯任何信息。
在例如,通過shell腳本檢查vsftpd服務是否運行,如果已經運行則輸出它的PId號,和監聽地址,否則輸出提示:警告,vsftpd服務器不可用
關閉vsftpd服務
3.多分支if語句應用
例如。若要編寫一個成績分檔的腳本、study.sh。根據輸入的考試成績,來判斷合格還是不合格
驗證:
ok