三.Shell之測試和判斷用法

測試用法

  • 格式:
    test 表達式

    [ 表達式 ]

條件爲返回0值,條件爲返回非0值
[後和]前的空格是必不可少的

  • 比較運算符:
    -eq 相當於 =
    -ge 相當於 >=
    -gt 相當於 >
    -le 相當於 <=
    -lt 相當於 <
    -ne 相當於 !=
  • 測試demo:
$ test 1 -eq 1
$ echo $?
0
$ test 1 -eq 2
$ echo $?
1

測試只有一個字符串,無操作符時:返回值都爲0,例:

$ test 1
$ echo $?
0
$ test 0
$ echo $?
0
$ test 001021
$ echo $?
0
$ [ 344 ]
$ echo $?
0
  • 字符串運算符
    string 測試字符串是否不爲空
    -n string 同上,測試字符串是否不爲空
    -z string 測試字符串是否爲空
    string1 = string2 測試兩個字符串是否相等
    string1 != string2 測試兩個字符串是否不相等

注意=和!=兩側必須有空格,否則當成一個字符串測試是否爲空

$ test ""
$ echo $?
1
$ test -n ""
$ test -n "" ; echo $?
1
$ test "" ; echo $?
1
$ test "hhh" = "hhh"
$ echo $?
0
$ test "hhh" = "hhh   "
$ echo $?
1
$ test "hhh"!="hhh"
$ echo $?
0
  • 文件操作符
    -d file 是否爲目錄
    -e file 是否存在
    -ffile 是否爲普通文件
    -r file 是否進程可讀
    -s file 是否長度不爲0
    -w file 是否可寫
    -x file 是否可執行
    -L file 是否爲符號化鏈接(L不可小寫)
  • 邏輯運算符
    ! 表達式 取反
    表達式1 -a 表達式2 同時爲真
    表達式1 -o 表達式2 有一個爲真

判斷

一個demo即可說明用法:

$ cat test.sh 
#!/bin/bash

echo "輸入一個數進行測試"
read num
if [ 1 -eq $num ] ; then
    echo 輸入了1
    exit 0
elif [ $num -lt 5 ]
then
    echo "大於1小於5"
    exit 2
else
    case "$num" in
        5)
            echo "輸入了5";;
        6)  
            echo "輸入了6";;
        7)
            echo "輸入了7";;
        *)
            echo "大於7";;
    esac
    exit 3
fi
$ ./test.sh ; echo '$?:'$?
輸入一個數進行測試
1
輸入了1
$?:0
$ ./test.sh ; echo '$?:'$?
輸入一個數進行測試
3
大於1小於5
$?:2
$ ./test.sh ; echo '$?:'$?
輸入一個數進行測試
6
輸入了6
$?:3
$ ./test.sh ; echo '$?:'$?
輸入一個數進行測試
8
大於7
$?:3

需要注意的是case 每一個匹配條件的執行後面必須有;;,不然會提示錯誤,我之前以爲是繼續執行下一個。

  • 算數及位運算符
    大部分與c語言一致,以下比較特別

** 冪運算
~ 按位非
^ 按位異或

  • 不同進制數字表示

2進製表示:

$ let "num=2#10" ; echo $num
2

8進製表示:

$ let "num=010";echo $num
8
$ let "num=8#10" ; echo $num
8

16進製表示:

$ let "num=16#10" ; echo $num
16

#用來表示的進制更廣,任何進制都可以

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