目錄
一.使用邏輯運算符判定命令執行結果
二.條件判斷方法?
三.判斷表達式
3.1文件判斷表達式
3.2字符串測試表達式
3.3整數測試表達式
3.4邏輯操作符
一.使用邏輯運算符判定命令執行結果
- && 在命令執行后如果沒有任何報錯時會執行符號后面的動作
- || 在命令執行后如果命令有報錯會執行符號后的動作
二.條件判斷方法?
使用測試語句來測試條件表達式的條件真假
實驗代碼
test "$a" = "$b" && echo yes || echo no #test
no
[ $a = $b ] && echo yes || echo no #[]
no
[[ $a =~ 2|10 ]] && echo yes || echo no #[[]]
yes
(( $a < 0 | $a > 10 )) && echo yes || echo no #(())
yes
三.判斷表達式
3.1文件判斷表達式
以下是常用的文件測試操作符
?實驗代碼
#檢測文件是否存在
[ -a "/mnt/fjw" ] && echo yes || echo no
no
touch fjw
[ -a "/mnt/fjw" ] && echo yes || echo no
yes
[ -e "/mnt/fjw" ] && echo yes || echo no
yes#檢測文件是否為塊設備
[ -b "/dev/sda" ] && echo yes || echo no
yes#檢測文件是否為字符設備
[ -c "/dev/pts/0" ] && echo yes || echo no
yes
[ -c "/dev/tty0" ] && echo yes || echo no
yes#檢測是否為鏈接文件
ln -s fjw yyy
[ -L "/mnt/yyy" ] && echo yes || echo no
yes#檢測是否為目錄
[ -d "/mnt/" ] && echo yes || echo no
yes#檢測是否為普通文件
[ -f "/mnt/" ] && echo yes || echo no
no
[ -f "/mnt/yyy" ] && echo yes || echo no
yes#檢測是否為套接字
find / -type -s #查找為套接字的文件
ls -l /run/systemd/journal/dev-log
srw-rw-rw-. 1 root root 0 May 31 11:39 /run/systemd/journal/dev-log
[ -S "/run/systemd/journal/dev-log" ] && echo yes || echo no #-S 為檢測套接字
yes#檢測文件是否設置了suid位
[ -u /mnt/fjw ]&& echo yes || echo no
yes#檢測文件是否可讀,可寫,可執行
[ -r /mnt/fjw ] && echo yes || echo no
yes
[ -w /mnt/fjw ] && echo yes || echo no
yes
[ -x /mnt/fjw ] && echo yes || echo no
no#檢測兩個文件的新舊
[ "fjw" -nt "fjwyyy" ] && echo yes || echo no
no
[ "fjw" -ot "fjwyyy" ] && echo yes || echo no
yes#檢測兩個文件的節點號是否相同
ls -i #查看文件節點號
[ "fjw" -ef "fjwtest" ] && echo yes || echo no
yes
3.2字符串測試表達式
常用的判斷字符串操作符
#檢測字符串是否為空
a=""
b=1
[ -z "$a" ] && echo yes || echo no
yes
[ -n "$a" ] && echo yes || echo no
no#檢測字符串是否相等
[ "$USER" = "root" ] && echo yes || echo no
yes
su - yyy
[ "$USER" = "root" ] && echo yes || echo no
no
3.3整數測試表達式
常用的判斷整數操作符
這里只拿[]與(())來做演示
#[]
a=1
[ "$a" -eq "1" ] && echo yes || echo no
yes
[ "$a" -ne "1" ] && echo yes || echo no
no
[ "$a" -gt "2" ] && echo yes || echo no
no
[ "$a" -ge "2" ] && echo yes || echo no
no
[ "$a" -lt "2" ] && echo yes || echo no
yes
["$a" -le "2" ] && echo yes || echo no
yes#(())
a=1
(($a==2)) && echo yes || echo no #這里要用==,使用=會識別成賦值
no
(($a==2)) && echo yes || echo no
no
(($a!=2)) && echo yes || echo no
yes
(($a>2)) && echo yes || echo no
no
(($a>=2)) && echo yes || echo no
no
(($a<2)) && echo yes || echo no
yes
(("a"<="2")) && echo yes || echo no
yes
3.4邏輯操作符
[ ! -e /mn ] && echo yes
yesa=5
[ "$a" -lt "10" -a "$a" -gt "0" ] && echo yes || echo no
yes
[[ "$a" -lt "10" && "$a" -gt "0" ]] && echo yes || echo no
yes
[[ $a < 10 && $a > 0 ]] && echo yes || echo no
no
(($a<10 && $a>0)) && echo yes || echo no
yes
(($a<3 || $a>10)) && echo yes || echo no
no