shell腳本應用(2)

Shell腳本應用(2

條件測試操作:

使用test命令操作

格式:test 條件表達式

或者:

條件表達式 ]//注意,左右兩邊至少得有一個空格

1.文件測試

-d:測試是否爲目錄

-e:是否存在

-f:是否爲文件

-r:測試當前用戶是否有讀取權限

-w:測試當前用戶是否有寫入權限

-x:測試是否設置有可執行權限

例:測試目錄是否存在,$?返回來的值爲0表示正常,非0表示命令不正常

081619475.jpg

爲了更直觀的查看測試結果,可以結合命令分隔符“&&”和echo命令一起使用,當命令成立時直接輸入“yes”。”&&”表示而且的意思

:

081619787.jpg  //如果目錄存在,將會輸出yes

081619834.jpg    //如果目錄不存在,將不會輸出

2.整數值比較

-eq:等於

-ne:不等於

-le:小於或等於

-ge:大於或等於

-gt:大於

-lt:小於

例如:

若要判斷當前可用的空閒內存大小,當低於1024MB時輸出具體數值,可以執行以下操作。其中“free –m”命令表示以MB爲單位輸出內存信息,提取的空閒內存數值通過命令替換賦值給變量cache

081619153.jpg

或者:

081619675.jpg

3.字符串比較

=:第一個字符串與第二個字符串相同

!=:第一個字符串與第二個字符串不相同,其中“!”爲取反的意思

-z:檢查字符串是否爲空。對於未定義的值將視爲空串

擴展一下:>1.txt可以清空1.txt裏的內容,如果沒有則可以創建1.txt文件

例:

081620282.jpg

例如:若要判斷當前系統的語言環境,當發現不是“en.us”時輸出信息

081906239.png

 

4.邏輯測試

邏輯測試指的是判斷兩個或多個條件之間的依賴關係。

&&邏輯與,表示而且的意思。只有當前後兩個條件都成立時,返回的值才爲0、使用test命令測試時,&&可改寫爲–a

||邏輯或:表示或者,只要前後兩個條件有一個成立時,整個測試命令的返回值爲0.使用test測試命令,可將||改寫爲-o

!邏輯否,表示不的意思,只有當指定的條件不成立時,整個測試命令的返回值才爲0

例如:若要判斷當前linux系統的內核版本是否大於2.4。可以執行以下操作

 

081622891.jpg

使用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腳本中執行掛載光盤的操作,默認先判斷掛載點目錄是否存在,若不存則新建此目錄

081623311.jpg

或者

081624509.jpg

在例如:在linux下有很多命令普通用戶不能直接執行,這個是直接測試當前登錄的用戶是否爲root用戶的

081625637.jpg

2.雙分支if語句應用

雙分支if語句只是在單分支的基礎上針對“條件不成立“的情況執行另一種操作,而不是”坐視不管“的不做任何操作。

例如:若要編寫一個連通性測試腳本pinghost.sh,通過位置參數$1提供目標主機地址,然後根據ping檢測結果給出相應提示,如下:

081627799.jpg

//在上述腳本代碼中,爲了提高ping命令的測試效率,使用了-c -I -w選項分別指定只發送三個測試包。間隔0.2s,超時時間爲3s、另外/dev/null相當於一個回收站。不會回顯任何信息。

在例如,通過shell腳本檢查vsftpd服務是否運行,如果已經運行則輸出它的PId號,和監聽地址,否則輸出提示:警告,vsftpd服務器不可用

081630726.jpg

 

081631262.jpg

關閉vsftpd服務

081632964.jpg

3.多分支if語句應用

例如。若要編寫一個成績分檔的腳本、study.sh。根據輸入的考試成績,來判斷合格還是不合格

081636290.jpg

驗證:

081638144.jpg

ok

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章