Shell腳本【7】Shell 條件表達式

條件表達式

基本命令和變量賦值語句屬於順序語句,條件和分支屬於選擇語句,for,while和until語句屬於循環語句

條件表達式是用於判斷條件是否滿足的邏輯表達式,當條件爲真,返回0,否則返回1

常用語法:

1、test 測試表達式

2、[ 測試表達式 ] #兩邊需要有空格

3、[[ 測試表達式 ]]

4、(( 測試表達式 ))

第一種和第二種是等價的,第三種是擴展的test命令,語法4常用於計算
在[[]] 雙中括號中可以使用通配符等進行模式匹配,&& || > < 等操作符可以直接應用於雙中括號中,但不能用於單中括號中

1.test語法示例

[root@system1 ~]# test -f /etc/passwd && echo 1 || echo 0
1
[root@system1 ~]# test -f /etc/haha && echo 1 || echo 0
0

2.單中括號[]示例

[root@system1 ~]# [ -f /etc/passwd ]&& echo 1 || echo 0
1
[root@system1 ~]# [ -f /etc/haha ]&& echo 1 || echo 0
0

3.雙中括號示例[[]]

[root@system1 ~]# [[ 3 > 2|| 1 > 2 ]]&& echo 1 || echo 0
1
[root@system1 ~]# [[ 3 > 2 && 1 > 2 ]]&& echo 1 || echo 0
0

文件狀態操作符

常用的文件狀態操作符總結如下:

文件狀態操作符 說明
-d filename 若文件爲目錄文件,則返回真
-f filename 若文件爲普通文件,則返回真
-r filename 若文件可讀,則返回真
-s filename 若文件長度大於0,則返回真
-u filename 若文件的SUID位被設置,則返回真
-w filename 若文件可寫,則返回真
-x filename 若文件可執行,則返回真

示例:

[root@system1 ~]# [ -f  /etc/passwd ]&& echo 1 || echo 0
1
[root@system1 ~]# [ -d  /etc/passwd ]&& echo 1 || echo 0
0

字符串操作符

字符串操作符用於判斷字符串的性質以及字符串之間的關係

字符串操作符 說明
string 若字符串非空,則返回真
-n string 若字符串長度大於0,則返回真
-z string 若字符串長度爲0,則返回真
string1 = string2 若兩個字符串相等,則返回真
string1 != string2 若兩個字符串不相等,則返回真

示例:

[root@system1 ~]# [ " " ]&& echo 0 || echo 1
0
[root@system1 ~]# [ "ab" = "abc" ]&& echo 1 || echo 0
0
[root@system1 ~]# [ -n "abc" ]&& echo 1 || echo 0
1

數字操作符

數字操作符操作的對象是數值,用於比較兩個數值的大小關係

數字操作符 說明
n1 -eq n2 判斷是否相等,相等返回真
n1 -ne n2 判斷是否不相等,不等返回真
n1 -lt n2 判斷n1小於n2,若小於返回真,助記:less than
n1 -gt n2 判斷n1大於n2,若大於返回真,助記:greater than
n1 -le n2 判斷n1不大於n2,若不大於返回真,助記:less equal
n1 -ge n2 判斷n1不小於n2,若不小於返回真,助記:greater equal

示例:

[root@system1 ~]# test "$x" -eq 5 
[root@system1 ~]# echo $?
0
[root@system1 ~]# test "$x" = 5 
[root@system1 ~]# echo $?
1

[root@system1 ~]# [ 2 -gt 3 ]&& echo 1 || echo 0
0
[root@system1 ~]# [ 2 -lt 3 ]&& echo 1 || echo 0
1

[root@system1 ~]# test "2" -gt "1" && echo 1 || echo 0
1
[root@system1 ~]# test "2" -lt "1" && echo 1 || echo 0
0

邏輯操作符

若操作對象是邏輯表達式,則用邏輯操作符

邏輯操作符 說明
e1 -a e2 同時爲真返回真
e1 -o e2 有一個爲真返回真
! e1 表達式e1不爲真時返回真

示例:

[root@system1 ~]# count=10
[root@system1 ~]# test "$count" -ge 0 -a "$count" -lt 10
[root@system1 ~]# echo $?
1
[root@system1 ~]# test "$count" -ge  0 -o "$count" -lt 10
[root@system1 ~]# echo $?
0

命令分隔符

命令分隔符 說明
cmd1;cmd2 以獨立的進程依次執行cmd1和cmd2
(cmd1;cmd2) 在同一進程中依次執行cmd1和cmd2
cmd1&cmd2 cmd1和cmd2同時運行,分屬於不同的進程組
cmd1&&cmd2 當cmd1爲真時,執行cmd2
cmd1 cmd2 當cmd1不爲真時,執行cmd2
cmd1& cmd1以後臺方式運行
[root@system1 ~]# file=test01.sh
[root@system1 ~]# test -s $file && cat $file	#若文件存在,則打開文件
#!/bin/bash
echo $0
echo $#
echo $*
echo $?
echo $@
echo $$
echo $!
exit
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章