1. 程式人生 > >字符串測試表達式

字符串測試表達式

var exit tool 外部 長度 大於等於 oot opera !=

常用字符串測試操作符


-n 字符串 若字符串的長度不為0,則為真

-z 字符串 若字符串的長度為0,則為真

串1 = 串2 若字符串1等於字符串2,則為真

串1 != 串2 若字符串1不等於字符串2,則為真


需要註意的是:

對於字符串的測試,一定要給變量字符串加雙引號在進行比較。

比較符合(例如 = 和 !=)的兩端一定要要有空格

!= 和 =可用於比較兩個字符串是否相同

例如:

root@ubuntu:~/xpf# [ -n "abc" ] && echo 1 || echo 0
1
root@ubuntu:~/xpf# test -n "abc" && echo 1 || echo 0
1
root@ubuntu:~/xpf# xx=xpg
root@ubuntu:~/xpf# [ -n "$xx" ] && echo 1 || echo 0
1
root@ubuntu:~/xpf# var=
root@ubuntu:~/xpf# [ -z "$var" ] && echo 1 || echo 0
1
root@ubuntu:~/xpf# var=rr
root@ubuntu:~/xpf# [ -z "$var" ] && echo 1 || echo 0
0
root@ubuntu:~/xpf# [ "abc" = "abc" ] && echo 1 || echo 0
1
root@ubuntu:~/xpf# [ "abc" != "abc" ] && echo 1 || echo 0 
0
root@ubuntu:~/xpf#

如果字符串比較時若等號兩端沒有空格,則會導致判斷出現邏輯判斷,即使語法正確,但是結果有問題。



切記:對於字符串的驗證,一定要使用雙引號。


整數二元比較操作

在[ ]裏面是喲個的操作符 在[[ ]]或者(( )) 使用的操作符

-eq ==或= 想等

-ne != 不等

-gt > 大於

-ge >= 大於等於

-lt < 小於

-le <= 小於等於



需要註意的是在 [ ] 裏面也可以使用 > ,< 但是要使用反斜線轉義,個人感覺還不如使用 -eq 之類進行數字比較

root@ubuntu:~/xpf# [ 2 < 1 ] && echo 1 || echo 0 
1
root@ubuntu:~/xpf# [ 2 \< 1 ] && echo 1 || echo 0
0
root@ubuntu:~/xpf# [ 2 == 1 ] && echo 1 || echo 0  
0
root@ubuntu:~/xpf# [ 2 = 1 ] && echo 1 || echo 0 
0
root@ubuntu:~/xpf# [ 2 != 1 ] && echo 1 || echo 0
1
root@ubuntu:~/xpf# [ 2 -gt 1 ] && echo 1 || echo 0  
1

為了避免錯誤,還是使用數據比較符進行比較

root@ubuntu:~/xpf# [ 2 -ge 2 ] && echo 1 || echo 0
1
root@ubuntu:~/xpf# [ 2 -gt 1 ] && echo 1 || echo 0  
1
root@ubuntu:~/xpf# [ 2 -lt 1 ] && echo 1 || echo 0 
0
root@ubuntu:~/xpf# [ 2 -le 1 ] && echo 1 || echo 0 
0
root@ubuntu:~/xpf# [ 2 -le 3 ] && echo 1 || echo 0 
1
[ ]和[[ ]]
root@ubuntu:~/xpf# [[ 5 > 3 ]] && echo 1 || echo 0  
1
root@ubuntu:~/xpf# [[ 5 = 3 ]] && echo 1 || echo 0 
0
root@ubuntu:~/xpf# [[ 5 < 3 ]] && echo 1 || echo 0 
0
root@ubuntu:~/xpf# [[ 5 != 3 ]] && echo 1 || echo 0 
1

個人感覺使用[ ]比較好用,有特殊的正則表達式在用。


整數表示測試:

root@ubuntu:~/xpf# [ $xx -gt $cc ] && echo 1 || echo 0    
0
root@ubuntu:~/xpf# [ $xx -lt $cc ] && echo 1 || echo 0  
1
root@ubuntu:~/xpf# [ $xx -eq $cc ] && echo 1 || echo 0  
0
root@ubuntu:~/xpf# [ $xx -ne $cc ] && echo 1 || echo 0  
1

利用[[ ]]和(( ))實現整數條件測試

root@ubuntu:~/xpf# [[ $xx < $cc ]] && echo 1 || echo 0 
1
root@ubuntu:~/xpf# [[ $xx > $cc ]] && echo 1 || echo 0
0
root@ubuntu:~/xpf# (( $xx < $cc )) && echo 1 || echo 0 
1
root@ubuntu:~/xpf# (( $xx > $cc )) && echo 1 || echo 0    
0

關於整數的比較。(( ))語法要優先[[ ]],,但是還是首先推薦使用(),然後就是(( )),最後使用[[ ]].



邏輯判斷符:

在[ ]裏面是喲個的操作符 在[[ ]]或者(( )) 使用的操作符

-a && 與

-o || 或

! ! 非


邏輯操作符的實踐事例

root@ubuntu:~/xpf# [ -f "$ff" -a -f "$ccc" ] && echo 1 || echo 0
0
root@ubuntu:~/xpf# [ -f "$ff" -a -f "$xx" ] && echo 1 || echo 0   
1
root@ubuntu:~/xpf# [ -f "$ff" -o -f "$xxx" ] && echo 1 || echo 0 
1
root@ubuntu:~/xpf# [ -! "$ff" ] && echo 1 || echo 0              
bash: [: -!: unary operator expected
0
root@ubuntu:~/xpf# [ ! "$ff" ] && echo 1 || echo 0  
0

需要註意的是:

“-a”和“-o”邏輯操作符符號需要用於[ ]中

&& 和 || 邏輯操作符可用於[[]]和(( ))中,y餓可以外部連接多個[ ]

註意:在[ ]和[[ ]]的兩端及比較符號的兩端。必須要有空格


邏輯操作符企業案例

#!/bin/bash

read -p "input a num:" num     #註意這裏的空格以及:符號

if [ "$num" -eq 1 -o "$num" -eq 2 ]
  then
    echo $num
    exit 5
else
  echo "this is bad"
fi

使用腳本傳參或者read讀入的方法



字符串測試表達式