2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Shell中的if then elif else——流程控制语句

Shell中的if then elif else——流程控制语句

时间:2022-11-26 22:37:23

相关推荐

Shell中的if then elif else——流程控制语句

流程控制——if

1. 单分支if条件语句

语法:

if [ 条件判断式 ];then程序fi

或者

if [ 条件判断式 ]then程序fi

注意事项:

if语句使用fi结尾,和一般语言使用大括号结尾不同[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格。then后面跟符合条件之后执行的程序,可以放在[]之后,用“;”分割。也可以换行写入,就不需要“;”了。

示例1:统计根分区使用率

制作一个脚本,用来统计根分区的使用率。

我们先给出全部的代码,然后来一步步分解:

#!/bin/bash# 统计根分区的使用率# Author:Veeja.Liurate=$(df -h | grep "dev/vda1" | awk '{print $5}' | cut -d "%" -f1)# 把根分区使用率作为变量赋予变量rateif [ $rate -ge 80 ]thenecho "Warning! /dev/vda1 is full!!"fi

首先是df命令,这个命令可以查看分区的使用率,例如:

我们可以看到我们的挂载点为根分区的对应文件系统为/dev/vda1,接下来使用命令grep筛选出这一行:

然后我们看到我们想要的13在第五列,再使用awk把第五列提取出来:

我们现在得到的12%,我们现在想要的是12这个数字,接下来:使用cut命令,使用-d参数指定%为分隔符,然后使用-f参数提取第一列:

我们最后把这个值赋给了变量rate:

rate=$(df -h | grep "dev/vda1" | awk '{print $5}' | cut -d "%" -f1)

然后我们使用条件表达式 [ $rate -ge 80 ]判断rate的值是否大于80,如果大于80,就在屏幕上输出一句话:“Warning! /dev/vda1 is full!!”。

2. 双分支if条件语句

语法:

if [ 条件判断式 ]then条件成立时,执行的程序else条件不成立时,执行的另一个程序fi

示例2 备份mysql数据库

#!/bin/bash#备份MySQL数据库#Author:Veeja.LIUntpdate asia. &>/dev/null#同步系统时间date=$(date +%y%m%d)#把当前系统时间按照“年月日”格式赋予变量datesize=$(du -sh /var/lib/mysql)#统计mysql数据库的大小,并把大小赋予size变量if [ -d /tmp/dbbak ]thenecho "Date : $date!" > /tmp/dbbak/dbinfo.txtecho "Data size : $size" >> /tmp/dbbak/dbinfo.txtcd /tmp/dbbaktar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &> /dev/nullrm -rf /tmp/dbbak/dbinfo.txtelsemkdir /tmp/dbbakecho "Date : $date!" > /tmp/dbbak/dbinfo.txtecho "Data size : $size" >> /tmp/dbbak/dbinfo.txtcd /tmp/dbbaktar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &> /dev/nullrm -rf /tmp/dbbak/dbinfo.txtfi

示例3 判断Apache是否启动

#!/bin/bash#Author:Veeja.LIUport=$(nmap -sT 127.0.0.1 | grep http | grep tcp | awk '{print $2}' )#使用nmap命令扫描服务器,并且截取Apache服务的状态,赋予变量portif [ "$port" == "open" ]thenecho "$(date) httpd is ok!" >> /tmp/autostart-acc.logelse/etc/rc.d/init.d/httpd start &> /dev.nullecho "$(date) restart httpd !!" >> /tmp/autostart-err.logfi

nmap是一个远程扫描端口的程序,例如我们可以测试一下我的本地的ip地址:

然后我们把带有“tcp”和“http”的行列出来,取第二个字段的值,如果是open,就代表Apache服务已经启动了。

3. 多分支if条件语句

if [ 条件判断式1 ]then当条件判断式1成立时,执行程序1elif [ 条件判断式2 ]then当条件判断式2成立时,执行程序2...省略更多条件...else当所有条件都不成立的时候,最后执行此程序fi

示例4 判断用户输入的是什么文件

#!/bin/bash#判断用户输入的是什么文件#Author:Veeja.LIUread -p "Please input a filename:" file# 接收用户键盘的输入,并且赋予变量fileif [ -z "$file" ]#判断file变量是否为空thenecho "Error, please input a filename!"exit 1elif [ ! -e "$file" ]#判断file的值是否存在thenecho "Your input is not a file!"exit 2elif [ -f "$file" ]#判断file的值是否为普通文件thenecho "$file is a regulare file!"elif [ -d "$file" ]#判断file的值是否为目录文件thenecho "$file is a directory!"elseecho "$file is an other file!"fi

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。