目录
一、条件测试
1、test判断
2、比较运算符
3、字符串比较
4、逻辑测试
二、if判断
1、if判断的类型
2、单分支if判断
1、httpd服务是否启动
2、判断bind的包是否安装
4、多分支if判断
1)判断结果类型
真
假
2)判断语法
[root@centos01 ~]# test -d /boot && echo "YES" |
测试boot是目录显示YES |
[root@centos01 ~]# [ -d /boot ] && echo "yes" |
测试boot是目录显示YES |
3)常见的测试选项
-d测试目录
-f测试文件
-w测试写权限
-r测试读权限
-x测试执行权限
-e测试文件目录是否存在
[root@shell ~] vim test.sh
#!/bin/bash
[ -d /cd ] || mkdir /cd #看有没有cd目录 ,没有就创建
[ -d /cd/Packages ] || mount /dev/cdrom /cd &> /dev/null #看看cd下有没有packages,没有就>挂载/dev/cdrom 挂载到/cd ,把结果扔掉
[root@shell ~] sh test.sh
[root@shell ~] echo $?
0
||(两个管道符)表示或者的意思,管道符前面的命令执行成功则结束,失败则执行管道符后面的命令
1)常见的比较运算符
gt大于
lt小于
ge(greater than or equal)大于等于
le(less than or equal)小于等于
eq等于
ne不等于
[root@shell ~] vim test.sh
#!/bin/bash
read -p "请输入一个数字:" num
[ $(expr $num % 2) -eq 0 ] && echo "$num 是偶数" || echo "$num 是基数"
#expr是计算器
[root@shell ~] sh test.sh
请输入一个数字:5
5 是基数
[root@shell ~] sh test.sh
请输入一个数字:6
6 是偶数
2)比较运算符的基本使用
[root@centos01 ~]# [ 10 -gt 5 ] && echo "YES" |
10大于5显示为yes |
[root@centos01 ~]# abc=`history | wc -l` [root@centos01 ~]# [ $abc -gt 100 ] && echo "yes" |
提取history命令行数,和100比较大于100显示yes |
1)字符串比较运算符
=:字符串内容是否相同
!=:字符串内容是否不同
-z:检查字符串是否为空
2)字符串比较的应用,字符串需要使用双引号
[root@centos01 ~]# [ "aaa" = "aaa" ] && echo "yes" |
判断aaa字符全是否等于aaa字符 |
[root@centos01 ~]# [ $LANG != "en.US" ] && echo "不支持中文!!" |
LANG变量不等于en.US显示不支持中文 |
1)逻辑测试的常见运算符
&&:而且或者用-a表示,两个结果为真显示
||:或,或者使用-o表示,两个判断结果只需要满足一个条件显示为真
!:否,两个判断结果不成立为真
[root@shell ~]# vim test.sh
#!/bin/bash
read -p "输入考试成绩:" num
[ $num -ge 60 -a $num -le 100 ] && echo "考试及格"
[root@shell ~] sh test.sh
输入考试成绩:80
考试及格
2)逻辑测试简单使用
[root@centos01 ~]# [ -d /etc ] && [ -d /boot ] && echo "是目录!!" |
两个结果为真显示是目录 |
[root@centos01 ~]# [ -d /etc ] || [ -d /ssss ] && echo "是目录!!" |
两个结果一个为真显示为是目录 |
1)单分支
条件满足执行命令序列
2)双分支
条件满足执行第一个命令序列
条件不满足执行第二个命令序列
3)多分支
条件满足执行第一个命令序列
条件不满足第一个条件匹配第二个条件,执行第二个命令序列
不满足第二个条件执行最后一个条件运行默认命令序列
1)单分if判断命令结构
if [ 条件 ]
Then
执行命令序列
fi
2)测试目录是否存在,不存在自动创建,目录存在停止执行脚本
[root@shell ~] vim test.sh
#!/bin/bash
mount="/mnt/test"
if [ ! -d $mount ] #如果测试不存在mount目录
then
mkdir -p $mount #就创建
fi
[root@shell ~] sh test.sh
[root@shell ~] echo $?
[root@shell ~]0
3)测试磁盘空间
[root@shell ~] vim test.sh
#!/bin/bash
du=$(df | grep "/$" | awk '{print $5}' | awk -F'%' '{print $1}')
if [ $du -gt 3 ]
then
echo "使用超出"
fi
[root@shell ~] sh test.sh
使用超出
3、双分支判断
1)多分支的命令结构
if [ 条件 ]
then
执行命令序列一
else
执行命令序列二
Fi
[root@shell ~]# vim test.sh
#!/bin/bash
netstat -lnpt | grep -q :80
if [ $? -eq 0 ] #意思为 如果[ echo$? = 0]
then #成功则输出
echo "网站服务正在运行"
else #失败则输出
echo "服务关闭,尝试启动"
systemctl start httpd
fi
[root@shell ~]# sh test.sh
服务关闭,尝试启动
[root@shell ~] vim test.sh
#!/bin/bash
rpm -q bind&> /dev/null
if [ $? -eq 0 ]
then
echo "软件包已安装"
else
echo "软件包未安装,尝试安装"
yum -y install bind &> /dev/null
[ $? -eq 0 ] && echo "软件安装成功"
fi
[root@shell ~] sh test.sh
软件包未安装,尝试安装
2)判断的主机是否通信
[root@shell ~] vim test.sh
#!/bin/bash
read -p "请输入指定的IP地址:" ping #交互
ping -c 3 -i 0.2 -W 3 $ping&> /dev/null #间隔0.2秒,检测3次 ping
if [ $? -eq 0 ] #如果 echo$?=0(成功执行)
then #成功则输出
echo "host is $ping UP!!!"
else #失败则输出
echo "host is $ping DOWN!!!"
fi
root@shell ~] sh test.sh
请输入指定的IP地址:192.168.1.12
host is 192.168.1.12 UP!!!
[root@shell ~] sh test.sh
请输入指定的IP地址:192.168.1.122
host is 192.168.1.122 DOWN!!!
1)多分支if判断语法结构
if [条件判断]
then
执行命令序列一
elif [ 条件判断 ]
then
执行命令序列二
else
执行命令序列三
2)编写多分支测试脚本
[root@shell ~] vim test.sh
1 #!/bin/bash
2
3
4 read -p "输入考试成绩范围1~100分:" fs
5 if [ $fs -ge 0 -a $fs -le 100 ]
6 then
7 if [ $fs -ge 85 -a $fs -le 100 ]
8 then
9 echo "你真棒!"
10 elif [ $fs -ge 60 -a $fs -le 84 ]
11 then
12 echo "继续努力! "
13 else
14 echo "重新学习!"
15 fi
16 else
17 echo "成绩有误,无法判断!"
18 fi
[root@shell ~] sh test.sh
输入考试成绩范围1~100分:61
继续努力!
[root@shell ~] sh test.sh
输入考试成绩范围1~100分:92
你真棒!
[root@shell ~] sh test.sh
输入考试成绩范围1~100分:20
重新学习!
3)石头剪刀布
[root@shell ~] vim test.sh
#!/bin/bash
while true #while true ;do ; done 可以形成循环
do
echo "这是(石头0 剪刀1 布2)的小游戏,放松一下:"
pc=$(expr $RANDOM % 3) # RANDOM是一个随机数生成器 %3除于3(只有3个结果0、1、2)
read -p "输入你的选择:" user
if [ $pc -eq 0 -a $user -eq 2 ] || [ $pc -eq 1 -a $user -eq 0 ] || [ $pc -eq 2 -a $user -eq 1 ] #3个结果对应3个输入内容 “||”表示或,3个结果只要有一个结果就显示为真
then
echo "恭喜你赢了电脑"
elif [ $pc -eq $user ]
then
echo "平局"
else
echo "你输了,再来"
fi
done
[root@shell ~]# sh test.sh
这是(石头0 剪刀1 布2)的小游戏,放松一下:
输入你的选择:2
平局
输入你的选择:1
平局
输入你的选择:2
平局
输入你的选择:2
恭喜你赢了电脑
输入你的选择: