天天看點

shell體驗三

shell 腳本的測試和比較

    test 指令:檢查檔案類型和比較數值的(根據表達式的執行結果(是真還是假),傳回一個退出狀态。)

    NAME

       test - check file types and compare values

    DESCRIPTION

       Exit with the status determined by EXPRESSION.

***************************************************************************************

檔案測試操作符:

    -d (directory) 檔案存在且(&&)為目錄,傳回true

    -f (file) 檔案存在且(&&)為普通檔案,傳回true

    -e(exit) 檔案存在,傳回true

    -r(read)檔案存在可讀,傳回true

    -w(write)檔案存在可寫,傳回false

    -x(executable)檔案存在可執行,傳回true

    -L (link)檔案存在且為連結檔案,傳回true

    file1 -nt file2 (nt==>newer then),以檔案的修改時間比較,檔案file1 比file2的新,傳回true

    file1 -ot file2 (ot==>older then),以檔案的修改時間比較,檔案file1比file2的舊,傳回true

檢視檔案的屬性:可以通過ls  和stat :例如:

    $ stat .bash_history 

       File: `.bash_history'

        Size: 18690           Blocks: 40         IO Block: 4096   regular file

        Device: 802h/2050d      Inode: 1049700     Links: 1

        Access: (0600/-rw-------)  Uid: (  500/ swallow)   Gid: (  500/ swallow)

        Access: 2017-01-23 14:44:54.134193735 +0800

        Modify: 2017-01-23 05:43:16.301220988 +0800

        Change: 2017-01-23 05:43:16.301220988 +0800

    $ ls -l .bash_history 

    -rw-------. 1 swallow swallow 18690 Jan 23 05:43 .bash_history

舉例測試:

    $ file1=del.sh ;file2=sum.sh

    $ echo $file1 $file2

    del.sh sum.sh

    $ ls -l $file1 $file2

    -rw-rw-r--. 1 swallow swallow 81 Jan 21 20:14 del.sh

    -rw-rw-r--. 1 swallow swallow 84 Jan 21 16:55 sum.sh

    $ test -f $file1 && echo 0 || echo 1(測試file1是否為普通檔案。如果是傳回0 不是傳回1)

    test 文法可以 簡寫為 []  但是[] 在書寫的時候要注意 [] 和内容之間要空格。

    $ [ -d $file2 ] && echo 0 || echo 1

    1

    $ [ $file1 -nt $file2 ] && echo 0 || echo 1

擴充:linux檔案權限體系的兩種表示方法。

    r: 代表可讀    w:代表可寫   x: 代表可執行 這個是權限的rwx 表示方法:

    與之對應的的數字表示方法: r: 4   w:2  x:1   即 4+2+1=7  (-:0沒有權限為0)

    $ [ -x $file1 ] && echo 0 || echo 1

    我們檢視一個系統腳本來體驗test的用法;

    $ cat /etc/init.d/nfs

    # Check for and source configuration file otherwise set defaults

    [ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs

*****************************************************************************************

    字元串測試操作符;比較2個字元串是否相同,測試字元串的長度為0或為null(空字元串)

    -n "字元串"  (nonzero) 字元串長度不為0 ,傳回true。也就是說字元串要内容

    -z "字元串"  (zero) 字元串長度為0,傳回true。字元串為空或不存在。

    "字元串1" = "字元串2"   這裡 = 可用 == 代替

    "字元串1" != "字元串2"   這裡 = 可用 == 代替

    關注點: 1.這裡比較字元串最好将字元串用""包裹。例如"file1" 

            2. 如果判斷相等的時候,= 前後空格。在計算機裡面= 常被用來指派(var=123)

    用一個不存的變量 var  測試 -n  -z   

    [swallow@swallow ~]$ echo $var

    [swallow@swallow ~]$ [ -n "$var" ] && echo 0 || echo 1

    [swallow@swallow ~]$ [ -z "$var" ] && echo 0 || echo 1

    邏輯操作符:

    -a (and,與,兩端都為真,結果為真) 也可以寫成 &&

    -o (or,或,兩端有一個是真,結果為真)也可以寫成 ||

    !(not,非,兩端相反。則結果為真)

    邏輯操作符是在上面單個判斷的基礎上來的 。需要結合單個判斷的結果,進行組合判斷。

    需要注意的是: -a -o  多用于[]裡面      && || 多用于[]之外

*************************************************************************************

    整數的二進制比較符

    -eq  (equal) (== 或=)

    -ne (not equal) (!== 或!=)

    -gt(greater than) (>)

    -ge(greater equal)(>=)

    -lt(less than) (<)

    -le(less equal)(<=)

    $ var1=23;var2=34

    $ echo $var1 $var2

    23 34

    $ [ $var1 -gt $var2 ] && echo 0 || echo 1

本文轉自 swallow_zys  51CTO部落格,原文連結:http://blog.51cto.com/12042068/1894143,如需轉載請自行聯系原作者

繼續閱讀