條件表達式
基本命令和變量賦值語句屬於順序語句,條件和分支屬於選擇語句,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