目录
一.使用逻辑运算符判定命令执行结果
二.条件判断方法
三.判断表达式
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
yes
a=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