shell指令碼-if else 語句以及test命令

weixin_34378969發表於2017-10-10

#!/bin/bash

text=jack

if  grep $text /etc/passwd

then

        echo ok

else

        echo "not exist"

fi

先查詢是否有這個使用者,查到,輸出OK,沒查到,輸出不存在.

注意,then的下一行的前面,不是空格,而是tab.其實這裡空格也行。只是為了好看,用TAB。

這裡可以看出,if裡面,只能是命令,命令返回0,才會執行then裡面的內容

然後真實中,通常if中的內容,並不是一個命令!那要怎麼處理呢,比如就是比較一個大小,就要用到test比較,以下是test比較常用寫法

#!/bin/bash

a=5

b=10

if [ $a -gt $b ]

then

        echo "$a greater than $b"

else

         echo "$a smaller than $b"

fi

可以看出if 後面變成一個[] 而且注意,括號裡面,前後都是有空格的!必須有空格,不然為錯

這裡的 -gt 表示大於 ,對應的 -lt 表示小於

這種寫法,也是最最常用的if的寫法

再比如,一個常用的 -d 來判斷檔案路徑是否存在

#!/bin/bash

mkdir=/usr/watson

if [ -d $mkdir ]

then

        echo "檔案存在"

else

        echo "檔案不存在"

fi

以下為常用判斷

檔案比較

-d 檢查是否存在,並且是一個目錄

-e 檢查file是否存在

-f 檢查是否存在,並且是一個檔案

-r 檢查是否存在,並且可讀

-w、-x

file1 -nt file2 file1比file2新

file1 -ot file2 file1比file2舊

[ -f "somefile" ] :判斷是否是一個檔案

[ -x "/bin/ls" ] :判斷/bin/ls是否存在並有可執行許可權

[ -n "$var" ] :判斷$var變數是否有值,或者叫長度是否非0,類似java中的str判空

[ "$a" = "$b" ] :判斷$a和$b是否相等

-r file     使用者可讀為真

-w file     使用者可寫為真

-x file     使用者可執行為真

-f file     檔案為正規檔案為真

-d file     檔案為目錄為真

-c file     檔案為字元特殊檔案為真

-b file     檔案為塊特殊檔案為真

-s file     檔案大小非0時為真

-t file     當檔案描述符(預設為1)指定的裝置為終端時為真

含條件選擇的shell指令碼 對於不含變數的任務簡單shell指令碼一般能勝任。但在執行一些決策任務時,就需要包含if/then的條件判斷了。shell指令碼程式設計支援此類運算,包括比較運算、判斷檔案是否存在等。

基本的if條件命令選項有: - eq —比較兩個引數是否相等(例如,if [ 2 –eq 5 ])

 -ne —比較兩個引數是否不相等

-lt —引數1是否小於引數2

-le —引數1是否小於等於引數2

-gt —引數1是否大於引數2

-ge —引數1是否大於等於引數2


還有一種,如果是比較複雜的數學表示式,可以用雙掛號形式

if(( a++ > 90 ))

相關文章