歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Shell條件測試

Shell條件測試

日期:2017/3/1 9:56:55   编辑:SHELL編程

寫Shell腳本時,有時要判斷字符串是否相等,可能還要檢查文件狀態或是數字測試。基於這些測試才能做進一步動作。

1、文件測試 測試文件狀態的操作符如下:
-d 目錄 -s 文件長度大於0、非空
-f 正規文件 -w 可寫
-L 符號連接 -u 文件有suid位設置
-r 可讀 -x 可執行
測試時使用邏輯操作符
測試文件狀態是否為OK,但是有時要比較兩個文件狀態。shell提供三種邏輯操作完成此功能。
-a 邏輯與,操作符兩邊均為真,結果為真,否則為假。
-o 邏輯或,操作符兩邊一邊為真,結果為真,否則為假。
! 邏輯否,條件為假,結果為真。
下面比較兩個文件:

[root@localhost ~]# ls -l results.txt scores.txt
-rwxr-xr-x 1 root root 0 Nov 21 12:22 results.txt
-rw-r--r-- 1 root root 0 Nov 21 12:15 scores.txt
下面的例子測試兩個文件是否均可讀。
  1. [root@localhost ~]# [ -w results.txt -a -w scores.txt ]
  2. [root@localhost ~]# echo $?
  3. 0
結果為真。 2、字符串測試
字符串測試是錯誤捕獲很重要的一部分,特別在測試用戶輸入或比較變量時尤為重要。 字符串測試的操作符有三種。
== 兩個字符串相等
!= 兩個字符串不等
-z 字符串為空
-n 非空字符串
3、測試數值 測試數值可以使用許多操作符,可以是:

-eq 數值相等
-ne 數值不相等
-gt 第一個數大於第二個數
-lt 第一個數小於第二個數
-le 第一個數小於等於第二個數
-ge 第一個數大於等於第二個數
下面的例子返回結果都一樣。均為測試兩個數是否相等(130是否等於130)。
  1. [root@localhost ~]# NUMBER=130
  2. [root@localhost ~]# [ "$NUMBER" -eq "130" ]
  3. [root@localhost ~]# echo $?
  4. 0
結果果然正確。 可以不必將整數值放入變量,直接用數字比較即可,但要加引號。
  1. [root@localhost ~]# [ "990" -le "995" ]
  2. [root@localhost ~]# echo $?
  3. 0
可以用邏輯操作符將兩個測試表達式結合起來。僅需要用到一對方括號,而不能用兩個,否則將返回錯誤信息“ too many arguments”。
  1. [root@localhost ~]# [ "990" -le "995" ] -a [ "123" -gt "33" ]
  2. -bash: [: too many arguments
下面例子測試兩個表達式,如果都為真,結果為真,正確使用方式應為:
  1. [root@localhost ~]# [ "990" -le "995" -a "123" -gt "33" ]
  2. [root@localhost ~]# echo $?
  3. 0

4、test、[] 、[[]]、(())的異同

[[ 是 bash 程序語言的關鍵字,而其他是內建命令!

$ type [ [[ test
[ is a shell builtin
[[ is a shell keyword
test is a shell builtin
絕大多數情況下,這個三個功能通用。但是命令和關鍵字總是有區別的。命令和 關鍵字的差別有多大呢? 如果是命令,它把參數作為比較表達式或文件測試,並且根據比較結果,返回一個退出碼。那樣比如 ">" "<" 就被 shell 解釋為重定向符號了。關鍵字卻不這樣。關鍵字把整個表達式看作一個單獨的元素,並且返回一個退出碼。[[]]結構比[]更靈活,是一個擴展的test命令。 (())可以應用於算術表達式的運算,並將結果作為退出碼。如果表達式結果為0,則返回1作為退出碼,否則返回0作為退出碼。
Copyright © Linux教程網 All Rights Reserved