Shell基础(八)流程控制一——if和case

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视频课程学习笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值