shell脚本条件测试、if判断

目录

一、条件测试

1、test判断

2、比较运算符

3、字符串比较

4、逻辑测试

二、if判断

1、if判断的类型

2、单分支if判断

1、httpd服务是否启动

2、判断bind的包是否安装

4、多分支if判断


一、条件测试

1、test判断

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

||(两个管道符)表示或者的意思,管道符前面的命令执行成功则结束,失败则执行管道符后面的命令

2、比较运算符

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

3、字符串比较

1)字符串比较运算符

=:字符串内容是否相同

!=:字符串内容是否不同

-z:检查字符串是否为空

2)字符串比较的应用,字符串需要使用双引号

[root@centos01 ~]# [ "aaa" = "aaa" ] && echo "yes"

判断aaa字符全是否等于aaa字符

[root@centos01 ~]# [ $LANG != "en.US" ] &&  echo "不支持中文!!"

LANG变量不等于en.US显示不支持中文

 

4、逻辑测试

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 "是目录!!"

两个结果一个为真显示为是目录

二、if判断

1、if判断的类型

1)单分支

条件满足执行命令序列

2)双分支

条件满足执行第一个命令序列

条件不满足执行第二个命令序列

3)多分支

条件满足执行第一个命令序列

条件不满足第一个条件匹配第二个条件,执行第二个命令序列

不满足第二个条件执行最后一个条件运行默认命令序列

2、单分支if判断

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

1、httpd服务是否启动

[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 
服务关闭,尝试启动

2判断bind的包是否安装

[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!!!

4、多分支if判断

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
恭喜你赢了电脑
输入你的选择:

你可能感兴趣的:(linux,前端,运维)