第一种:
if test判断;then
    如果test判断为真[返回值为0],则执行该命令
fi

第二种:
if test判断;then
    如果test判断为真[返回值为0],则执行该命令
else
    如果test判断为假[返回值为1],则执行该命令
fi

第三种:

if test判断1;then
    如果test判断1为真[返回值为0],则执行该命令
elif test判断2;then
    如果test判断2为真[返回值为0],则执行该命令
else
    如果test判断1,2都为假[返回值为1],则执行该命令
fi


举例:
用户输入成绩,判断成绩对应等级
# vim if.sh
#! /bin/bash
read -p "请输入你的成绩:" num


if [[ $num =~ ^[0-9]+$ ]];then
   :
else
   echo "请输入纯数字"
   exit 10
fi


if [ $num -ge 90 ];then
    echo "$num成绩优秀"
elif [ $num -ge 80 ];then
    echo "$num成绩良好"
elif [ $num -ge 60 ];then
    echo "$num成绩及格"
elif [ $num -lt 60 ];then
    echo "$num不及格"
else
   echo "请输入0-100的纯数字"

fi

=========================================
多条件联合
逻辑与
if [ $condition1 ] && [ $condition2 ]
if [ $condition -a $condition2 ]
if [[ $condition1 && $condition2 ]]

例如:
if [ $num -ge 90 ] && [ $num -le 100 ];then
    echo "$num成绩优秀"
elif [ $num -ge 80 ] && [ $num -lt 90 ];then
    echo "$num成绩良好"
elif [ $num -ge 60 ] && [ $num -lt 80 ];then
    echo "$num成绩及格"
elif [ $num -lt 60 ];then
    echo "$num不及格"
else
   echo "请输入0-100的纯数字"

fi

逻辑或
if [ $condition1 ] || [ $condition2 ]
if [ $condition -o $condition2 ]
if [[ $condition1 || $condition2 ]]

总结:逻辑与需要满足两个条件,逻辑或需要满足其中一个条件


检查nginx启动情况:
# vim nginx.sh
#! /bin/bash
systemctl status nginx &> /dev/null
if [ $? -eq 0 ];then
echo "nginx 正在运行"

else

echo "正在启动中。。。"
systemctl start nginx &> /dev/null && echo "nginx已经启动成功并且正在运行" || echo "nginx 启动失败"

fi

命令排序执行
    ;   &&    ||
cmd1;cmd2     cmd1执行完成,就执行cmd2
cmd1&&cmd2    cmd1执行成功,才执行cmd2
cmd1||cmd2    cmd1执行失败,才执行cmd2

 

作业1:ping主机测试
# vim ping.sh
#!/usr/bin/env bash

read -p "请输入主机名或者ip地址: " host

# -c 3 ping3次,-W 1 超过1秒没ping通,认为超时失败
ping  -c 1  -W 1 $host  &> /dev/null

if [ $? -eq 0 ];then
   echo "$host 能ping通"
else
   echo "$host 不能ping通"
fi

运用文件测试和字符串比较和数字比较
# vim ping.sh
#! /bin/bash

read -p "请输入主机名或者IP地址:" IP

ping -c 3 -W 1 $IP &> /dev/null

#if [ -z "$IP" ];then
#  echo "请输入正确的主机名或者IP地址"
#  exit 111
#
#fi
a=/root
# if [ -z "$IP" ]
if [ -f "$a" ];then
  if [ $? -eq 0 ];then
    echo "$IP 可以ping通"
  else
    echo "$IP 不可以ping通"
  fi

else
  echo "请输入正确的主机名或者IP地址"

fi


=============
作业2:判断一个用户是否存在
# vim user.sh
#! /usr/bin/env bash

id $1 &> /dev/null

if [ $? -eq 0 ];then
    echo "用户 $1 已存在"
else
    echo "用户 $1 不存在"
fi

=====================
作业3:判断软件包是否安装,如果没有则自动安装

# vim package.sh
#!/usr/bin/env bash

read -p "请输入服务名称:" package

rpm -q $package &> /dev/null

if [ $? -eq 0 ];then
   echo "$package 已经安装"
else
   yum -y install $package  &> /dev/null
   if [ $? -eq 0 ];then
        :
   else
       curl -o /etc/yum.repos.d/Centos-7.repo https://mirrors.aliyun.com/repo/Centos-7.repo
       curl -o /etc/yum.repos.d/epel-7.repo   http://mirrors.aliyun.com/repo/epel-7.repo
       yum clean all
       yum -y install $package
   fi
fi

=================
作业4:判断用户输入的是否是纯数字
# vim num.sh
#! /bin/bash

read -p "请输入纯数字:" num

if [[ $num =~ ^[0-9]+$  ]];then

   echo "$num 是纯数字"

else

   echo "$num 不是纯数字"
   exit 222
fi

扩展:判断学生的成绩等级
# vim a.sh
#! /usr/bin/env bash

read -p "请输入你的成绩:" num

if [[ $num =~ ^[0-9]+$ ]];then
    :
else
    echo "$num 不是纯数字,请重新输入"
    exit 10
fi

if [ $num -ge 90 ] && [ $num -le 100 ];then
 echo "$num 成绩优秀"
elif [ $num -ge 80 ] && [ $num -lt 90 ];then
 echo "$num 成绩良好"
elif [ $num -ge 60 ] && [ $num -lt 80 ];then
 echo "$num 成绩合格,继续努力"
elif [ $num -ge 0 ] && [ $num -lt 60 ];then
 echo "$num 成绩不合格!!!!"
else
   echo "请输入0-100的数字"


===========
作业5:报警脚本,要求如下:
   根分区剩余空间小于20%
   内存已用空间大于80%
   配合crond每5分钟检查一次,如果出现问题,将问题内容写入/tmp/gaojing.txt

# vim disk_free.sh 
#!/usr/bin/env bash

disk_use=`df -TH | awk '/\/$/{print $6}' | awk -F% '{print $1}'`
free_total=`free -m |awk '/^Mem/{print $2}'`
free_use=`free -m |awk '/^Mem/{print $3}'`
free_per=$[$free_use*100/$free_total]

if [ $disk_use -gt 80 ] || [ $free_per -gt 80 ];then
   date >> /tmp/gaojing.txt
   echo "叼毛赶紧处理,机器要出问题了!!!!" >> /tmp/gaojing.txt
   echo "磁盘使用率${disk_use}% 内存使用率${free_per}%" >> /tmp/gaojing.txt
else
   :
fi

free | awk 'NR==2 {printf "%.0f", $3/$2 * 100}'
free -m | awk 'NR==2{print $3/$2*100}' | cut -d'.' -f1
free -m | awk 'NR==2{print $3/$2*100}' | awk -F. '{print $1}'

# crontab -e
*/5 * * * *  /bin/bash /script/disk_free.sh

在shell里面涉及变量相除等于小数,最好先乘再除,因为在shell里面除法不能直接获取小数
例如:
free_per=$[$free_use*100/$free_total]