条件判断

1)文件测试

格式:[ 表达式 ] ([ ]括号前后必须有空格)

1
2
3
4
5
6
7
# 参数选项:
-d:是否是目录
-f:是否是文件
-r:是否具有读取权限
-w:是否具有写入权限
-x:是否具有执行权限
-e:测试文件或目录是否存在

取反

1
[ ! -d test ];then 目录不存在;fi

判断文件

1
2
3
4
5
6
7
8
#!/bin/bash
f=/root/lijie.txt
if [ -f $f ]
then
echo $f exist
else
touch $f
fi

判断目录

1
2
3
4
5
6
7
8
#!/bin/bash
f=/root/lijie.txt
if [ -d $f ]
then
echo $f exist
else
touch $f
fi

判断文件是否可读

1
2
3
4
5
6
#!/bin/bash
f=/root/lijie.txt
if [ -r $f ]
then
echo $f readable
fi

判断文件是否可写

1
2
3
4
5
6
#!/bin/bash
f=/root/lijie.txt
if [ -w $f ]
then
echo $f writeable
fi

判断文件是否可执行

1
2
3
4
5
6
#!/bin/bash
f=/root/lijie.txt
if [ -x $f ]
then
echo $f exeable
fi

2)整数值比较:

1
2
3
4
5
6
7
# 参数选项:
-eq:等于
-ne:不等于
-gt:大于
-lt:小于
-le:小于或等于
-ge:大于或等于

例:查看文件系统/boot结尾的信息第六列去掉%提取第一位大于50的话就会显示too many 否则显示too low

1
2
3
4
5
6
7
8
9
# vi test.sh
info=$(df -hT | grep "/boot$" | awk '{print $6}' | cut -d% -f1)
if [ ${info} -gt 50 ];then
echo "too many"
else
echo "too low"
fi
# sh test.sh
too low

3)字符串比较:

1
2
3
4
5
6
7
8
9
10
11
# 选项参数:

=:第一个字符串与第二个字符串相同。
!=:第一个字符串与第二个字符串不相同,其!符号表示取反。
-z:检查字符串是否为空(zero),对于未定义会赋予空值的变量将视为空串。

# 逻辑测试:

&&:逻辑与,(and)
||:逻辑或,否则,(or)
!:逻辑非,(取反)

例: 判断用户是否存在:

检查abc用户是否存在,如果存在,则显示”abc is exits”。如果不存在则创建:

1
2
3
4
5
6
# vi useradd.sh
id abc &> /dev/null && echo "abc is exits" || useradd abc && echo "useradd is ok"
# sh useradd.sh
useradd is ok

tail -3 /etc/passwd

条件判断脚本示例

If条件语句:

1)单分支语句结构:

1
2
3
if 条件表达式;then
命令序列
fi

例:查询以下/qq/ww/ee是否不存在,则进行创建

1
2
3
4
5
#!/bin/bash
io="/qq/ww/ee"
if [ ! -d $io ];then
mkdir -p $io && echo "目录不存在,并且已重新创建此目录"
fi

例:查看当前登录用户

1
2
3
4
#!/bin/bash
if [ $user = "abc" ];then
echo "ERROR: user is not abc"
fi

2)双分支语句结构:

1
2
3
4
5
if 条件表达式;then
命令序列1
else
命令序列2
fi

例:检测80服务是否启动,如果没启动则进行启动

1
2
3
4
5
6
7
#!/bin/bash
netstat -anpt | grep 80
if [ $? -eq 0 ];then
echo "httpd is running"
else
systemctl restart httpd && echo "httpd is running"
fi

3)多分支语句结构:

1
2
3
4
5
6
7
if 条件表达式1;then
命令序列1
elif 条件表达式2;then
命令序列2
else
命令序列3
fi

例:判断用户输入的内容

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
read -p "hello (q,w,e,r):" oo
if [ $oo = q ];then
echo "$oo is pig"
elif [ $oo = w ];then
echo "$oo is dog"
elif [ $oo = e ];then
echo "$oo is aa"
else
echo "$oo is sb"
fi

4)If中多个判断条件语句

1
if [[ $a > $b ]] || [[ $a < $c ]]