shell之条件测试和if语句
文章目录
- 一、条件测试
- 1.1、文件测试
- 1.2、整数测试
- 1.3、字符串与逻辑测试
- 1.4、逻辑测试
- 1.5、运算符
- 二、if 判断语句
- 2.1、if 单分支语句
- 2.2、if双分支语句
- 2.3、if多分支语句
一、条件测试
1.1、文件测试
test命令
test命令:测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值
命令基本格式
格式一:test 条件表达式
格式二:[ 条件表达式 ] '两端要有空格,此法更为常用'
文件测试基本格式
[ 操作符 文件或目录 ] '注意两端空格'
&? 返回0表示条件成立,返回非零值表示条件不成立
&& 逻辑与,"而且"的意思
|| 逻辑或,"或者"的意思
[root@localhost mnt]# touch abc
[root@localhost mnt]# [ -r abc ] && echo "yes"
yes
[root@localhost mnt]# [ -w abc ] && echo "yes"
[root@localhost mnt]#
[root@localhost mnt]# [ -w abc ] || echo "yes"
yes
1.2、整数测试
命令基本格式
[ 整数1 操作符 整数2 ]
常用的测试操作符
[root@localhost mnt]# [ 5 -gt 3 ] && echo "yes"
yes
[root@localhost mnt]# [ 5 -gt 6 ] && echo "yes"
[root@localhost mnt]# [ 5 -le 6 ] && echo "yes"
yes
[root@localhost mnt]# [ 5 -le 3 ] && echo "yes"
[root@localhost mnt]# free -m
total used free shared buff/cache available
Mem: 1823 692 82 9 1048 908
Swap: 4095 0 4095
[root@localhost mnt]# free -m | grep "Mem" | awk '{print $4}'
82
[root@localhost mnt]# ddd=$(free -m | grep "Mem" | awk '{print $4}')
[root@localhost mnt]# echo $ddd
84
[root@localhost mnt]# [ $(free -m | grep "Mem" | awk '{print $4}') -gt 100 ] && echo "yes"
[root@localhost mnt]# [ $(free -m | grep "Mem" | awk '{print $4}') -gt 80 ] && echo "yes"
yes
1.3、字符串与逻辑测试
常用的格式
格式一:[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
格式二:[ -z 字符串 ]
1.4、逻辑测试
[root@localhost opt]# [ ! -d /opt/demo ] && echo "yes"
[root@localhost opt]# [ 1 -eq 1 ] && [ 2 -eq 2 ] && echo "yes"
yes
1.5、运算符
一元运算符
i++和++i 的意义在于前面有没有赋值运算符。
i++ 就是先赋值再自加,++i 就是先自加再赋值。
i=–i:先自减在赋值[root@localhost mnt]# i=1
[root@localhost opt]# echo $i
1
[root@localhost opt]# let i=++i
[root@localhost opt]# echo $i
2
[root@localhost opt]# let i+=2 ‘相当于i=i+2’
[root@localhost opt]# echo $i
4二元运算符
a+b=c- 三元运算符
条件&&结果1||结果2
二、if 判断语句
2.1、if 单分支语句
单分支结构(基本格式)
if 条件测试操作
then 命令序列
fi
[root@localhost opt]# vim a.sh
#!/bin/bash
if [ ! -d demo01 ] '若不存在demo01,则执行下述命令'
then
mkdir -p demo01
echo "demo01创建成功"
fi
[root@localhost opt]# chmod +x a.sh
[root@localhost opt]# ./a.sh
demo01创建成功
2.2、if双分支语句
双分支结构(基本格式)
if 条件测试操作
then 命令序列1
else 命令序列2
fi
举例:查看目标主机是否存活,显示检测结果
[root@localhost opt]# vim a.sh
#!/bin/bash
read -p "请输入IP地址:" ip
ping -c 3 -i 0.2 -W 3 $ip &> /dev/null
if [ $? -eq 0 ]
then
echo "$ip is up"
else
echo "$ip is down"
fi
[root@localhost opt]# chmod +x a.sh
[root@localhost opt]# ./a.sh
请输入IP地址:192.168.220.130
192.168.220.130 is down
[root@localhost opt]# ./a.sh
请输入IP地址:192.168.220.131
192.168.220.131 is up
其中:
-c:发送三个包
-i: 发包间隔0.2秒
-W:等待时间3秒
2.3、if多分支语句
多分支结构(基本格式)
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi
举例:判断分数范围,分数优秀,合格,不合格三挡
[root@localhost opt]# vim b.sh
#!/bin/bash
read -p "请输入成绩:" score
if [ $score -lt 0 ] || [ $score -gt 100 ]
then
echo "输入有误"
exit 1;
elif [ $score -ge 85 ] && [ $score -le 100 ]
then
echo "成绩优秀"
elif [ $score -ge 70 ] && [ $score -le 84 ]
then
echo "成绩合格"
else
echo "成绩不合格"
fi
[root@localhost opt]# ./b.sh
请输入成绩:99
成绩优秀
[root@localhost opt]# ./b.sh
请输入成绩:84
成绩合格
[root@localhost opt]# ./b.sh
请输入成绩:53
成绩不合格
[root@localhost opt]# ./b.sh
请输入成绩:120
输入有误
[root@localhost opt]# ./b.sh
请输入成绩:-2
输入有误
还没有评论,来说两句吧...