if条件判断
单分支if条件语句
单分支if条件语句最为简单,就是只有一个判断条件,如果符合条件则执行某个程序,否则就不执行。
命令格式:
if [条件判断式];then
程序
fi
#或
if [条件判断式]
then
程序
fi
注:
- shell语言中if语句要使用fi结尾。
- [ 条件判断式 ]就是相当于使用test命令进行判断,且中括号与条件判断式之间要有空格。
- then后面跟符合条件之后执行的程序,then可以放在[]之后,中间要加";",或者是另起一行,就不需要";"了。
例:
- 监测根分区的磁盘占用
#!/bin/bash
used=$( df -h | grep "/dev/sda2" | awk '{print $5}' | cut -d % -f 1 )
if [ $used -ge 80 ]
then
echo "error! " #当磁盘占用超过80%
fi
if [ $used -le 80 ]
then
echo "fine! " #当磁盘占用没有超过80%
fi
双分支if语句
语句格式:
if [条件判断式]
then
条件成立时执行的语句
else
条件不成立时执行的语句
fi
例1:备份mysql数据库
#!/bin/bash
#备份mysql数据库
ntpdate asia.pool.ntp.org &>/dev/null
#同步系统时间
date=$(date +%y%m%d)
#把当前系统时间按照“年月日”格式赋予变量
size=$(du -sh /var/lib/mysql)
#统计mysql数据库的大小,并把大小赋予size变量
if [ -d /tmp/dbbak ]
#判断备份目录是否存在,执行下面的脚本
then
echo "Date : $date! " > /tmp/dbbak/dbinfo.txt
#把当前日期写入临时文件
echo “Date size :$size” >> /tmp/dbbak/dbinfo.txt
#把数据大小写入临时文件
cd /tmp/dbbak
#进入备份目录
tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
#将数据库和临时文件打包,输出丢入垃圾桶
rm -rf /tmp/dbbak/dbinfo.txt
#删除临时文件
else
mkdir /tmp/dbbak
#判断为假时,建立备份目录
echo "Date : $date! " > /tmp/dbbak/dbinfo.txt
echo “Date size :$size” >> /tmp/dbbak/dbinfo.txt
cd /tmp/dbbak
tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
rm -rf /tmp/dbbak/dbinfo.txt
fi
例2:检测Apache是否运行
#!/bin/bash
#判断Apache是否在运行,如果没有运行启动Apache
httpdst=$(nmap -sT 192.168.19.130 | grep "tcp" | grep "http" | awk '{print $2}' )
#判断http状态
if [ "$httpdst" == "open" ]
then
echo "httpd is ok! "
else
echo "httpd is down.must restart! "
systemctl start httpd
#没有运行时重启
fi
多分支if语句
语句格式:
if [条件判断句]
then
条件判断为真时执行的程序
elif [条件判断式2]
then
条件判断式2为真时执行的程序
else
其他情况执行的程序
fi
例1:判断文件类型
#!/bin/bash
#判断文件类型
read -t 30 -p "请输入要检测的文件名称:" filename
#filename=$1
#从外部获取文件名
if [ -z "$filename" ]
then
echo "错误,未输入文件名。"
elif [ -b "$filename" ]
#判断改文件是否为块设备文件
then
echo "该文件为块设备文件。 "
elif [ -c "$filename" ]
then
echo "该文件为字符设备文件。"
elif [ -f "$filename" ]
then
echo "该文件为普通文件。"
elif [ -d "$filename" ]
then
echo "该文件为目录文件。"
else
echo "该文件类型未知。"
fi
case选择语句
case语句和if一样是多分支条件判断语句,但case只能对应一种条件。
语句格式:
case $变量名 in
"值1")
变量值为值1时,执行程序1
;;
"值2")
变量值为值2时,执行程序2
;;
...省略其他分支...
*)
变量值为其他时,执行此程序
;;
esac
例:四则运算
#!/bin/bash
#简易四则运算
read -t 30 -p "输入数字1: " num1
read -t 30 -p "输入数字2: " num2
read -t 30 -p "输入运算符: " ope
#输入数字及运算符
if [ -n "$num1" -a -n "$num2" ]
#判断所输数字是否为空
then
test1=$(echo $num1 | sed 's/[0-9]//g')
test2=$(echo $num2 | sed 's/[0-9]//g')
if [ -z "$test1" -a -z "$test2" ]
#判断所输内容是否为纯数字
then
case $ope in
#根据输入运算符进行相应运算
"+")
value=$(($num1+$num2))
;;
"-")
value=$(($num1-$num2))
;;
"*")
value=$(($num1*$num2))
;;
"/")
value=$(($num1/$num2))
;;
*)
echo "error : ope is wrong! "
exit 1
;;
esac
else
echo "error : num is not num! "
exit 2
fi
else
echo "error : num is null! "
exit 3
fi
echo "$num1 $ope $num2 = $value"
ps:尚硅谷linux视频课程学习笔记