1. bash裡的true和false並不是我們通常所認為的0和1。 |
true和false是shell的內建命令,返回邏輯值。例如: |
$ true |
$ echo $? |
0 |
$ false |
$ echo $? |
1 |
$?是一個特殊的變數,存放有上一個程式的結束狀態 |
在shell裡面,把0作為程式是否成功結束的標誌。 |
|
2. 在shell中,邏輯值表示程式的返回值,如果程式成功返回, |
則為真,如果不成功返回,則為假。 |
|
3. test命令可以用來進行數值測試,字串測試,檔案測試。 |
* 數值測試: |
$ if test 5 -eq 5 ; then echo "YES" ; else echo "NO"; fi |
YES |
$ if test 5 -ne 5 ; then echo "YES" ; else echo "NO"; fi |
NO |
* 字串測試 |
$ if test -n "not empty" ; then echo "YES" ; else echo "NO"; fi |
YES |
-n 測試字串的長度不為零 |
$ if test -z "not empty" ; then echo "YES" ; else echo "NO"; fi |
NO |
-z 測試字串的長度為零 |
$ if test -z "" ; then echo "YES" ; else echo "NO"; fi |
YES |
* 檔案測試 |
$ if test -f /boot/System.map ; then echo "YES" ; else echo "NO"; fi |
YES |
-f 用來測試檔案是否存在,以及是否是一個普通的檔案 |
$ if test -d /boot/System.map ; then echo "YES" ; else echo "NO"; fi |
-d 用來測試檔案是否存在,以及是否是一個目錄 |
|
4. test邏輯組合測試 |
* 與,例如: |
$ a=5; b=4; c=6; |
$ if test $a -eq 5 -a $b -eq 4 -a $c -eq 6 ; then echo "YES" ; else echo "NO" ; fi |
YES |
* 或,例如: |
$ if test $a -eq 5 -o $b -ne 4 ; then echo "YES" ; else echo "NO" ; fi |
YES |
* 非,例如: |
$ if test ! -f /etc/profile ; then echo "YES" ; else echo "NO" ; fi |
NO |
|
5. test與&&,|| |
$ str1="test"; str2="test" |
$ if test -z "$str1" -o "$str2" == "$str1" ; then echo "YES" ; else echo "NO" ; fi |
YES |
$ if test -z "$str1" || test "$str1"=="$str2" ; then echo "YES" ; else echo "NO" ; fi |
YES |
兩個測試語句是等價的。但是可以看到-o使用在test內部,而||使用在test之間 |
test可以使用[]來代替,需要注意的是[]的前後都需要空格 |
在測試字串時,建議所有的變數都用雙引號括起來,以防止變數代表的字串為空白的情況 |
在使用中括弧測試時,要注意: |
$ i=5 |
$ if [ $i=6 ] ; then echo "YES" ; else echo "NO"; fi |
YES |
$ if [ $i = 6 ] ; then echo "YES" ; else echo "NO"; fi |
NO |
|
6. 命令列表 |
* 對於&&,如果前面的命令成功執行,則繼續執行後面的命令;如果失敗,就不執行後面的命令 |
* 對於||,若果前面的命令沒有成功執行,則繼續執行後面的命令 |
例如: |
ping -c1 www.lzu.edu.cn && echo "connected" |
* 命令列表有時用來取代if/then等分支結構,這樣可以省略一些代碼
參考資料
==================== Shell編程範例 -- by falcon
|