shell学习之路:流程控制(if)
2015-06-29 20:57
531 查看
1.单分支if条件语句
注意事项:
1.if语句使用fi结尾,和一般语言使用大括号结尾不同
2.[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格 前后都要有
3.then后面跟符合条件之后执行的程序,可以放在[]之后,用";"分号分割。也可以换行写入,就不需要";"了
例如:判断分区使用率
脚本说明: 我的根分区是/dev/sdb5 我将 df -h 中的第五列的百分数字部分提取出来
赋给$rate 在用if判断比较结果是否大于80 大于则成立 不大于则不成立 成立则输出警告 不成立则不执行任何
当然我也可以将警告替换成其他 例如email信息或者触发另一个警告脚本以及将警告信息生成日志等等!
2.双分支if条件语句
例如1:备份mysql数据库
示例二:判断apache是否启动:
需要安装nmap命令 CentOS下执行:yum -y installl nmap
http.sh
3.多分支if条件语句
例如:1
if [ 条件判断式 ];then 程序 fi 或者 if [ 条件判断式 ] then 程序 fi
注意事项:
1.if语句使用fi结尾,和一般语言使用大括号结尾不同
2.[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格 前后都要有
3.then后面跟符合条件之后执行的程序,可以放在[]之后,用";"分号分割。也可以换行写入,就不需要";"了
例如:判断分区使用率
脚本说明: 我的根分区是/dev/sdb5 我将 df -h 中的第五列的百分数字部分提取出来
赋给$rate 在用if判断比较结果是否大于80 大于则成立 不大于则不成立 成立则输出警告 不成立则不执行任何
当然我也可以将警告替换成其他 例如email信息或者触发另一个警告脚本以及将警告信息生成日志等等!
#!/bin/bash #统计根分区使用率 #Author: pat (Email:239@qq.com) rate=$(df -h | grep "/dev/sda5" | awk '{printf $5"\n"}' | cut -d "%" -f 1) #把根分区使用率作为变量值赋予变量rate if [ $rate -ge 80 ] then echo "WARNING! /dev/sda5 is full!!" fi
2.双分支if条件语句
if [ 条件判断式 ] then 条件成立时,执行的程序 else 条件不成立时,执行的程序 fi
例如1:备份mysql数据库
#!/bin/bash #备份mysql数据库 ntpdate asia.pool.ntp.org $>/dev/null #同步系统时间 date=$(date +%y%m%d) #把当前系统时间的年月日格式赋予变量date size=$(du -sh /var/lib/mysql) #统计mysql数据库文件的大小,并把大小赋给变量size if [ -d /tmp/dbbak ] then echo "Date : $date!" > /tmp/dbbak/dbinfo.txt echo "Data 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 "Data 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
示例二:判断apache是否启动:
需要安装nmap命令 CentOS下执行:yum -y installl nmap
#!/bin/bash port=$(nmap -sT localhost | grep tcp | grep http | awk '{print $2}') echo "$port" ##使用nmap命令扫描服务器,并截取apache服务的状态,赋给变量port if [ "$port" == "open" ] then echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log else if [ -f "/etc/init.d/httpd" ] ; then /etc/init.d/httpd start &>/dev/null echo "$(date) restart httpd !!" >> /tmp/autostart-err.log else echo "error is not httpd server your is chack apache?" fi fi
http.sh
3.多分支if条件语句
if [ 条件判断1 ] ; then 当前条件判断式1成立时,执行的程序 elif [ 条件判断2 ] ; then 当前条件判断2成立时,执行的程序 .......可写多个 else 当所有条件均不成立时,执行的程序 fi
例如:1
#!/bin/bash read -p "Please input -a filename:" file # 接收键盘的输入,并赋给变量file if [ -z "$file" ] # 判断变量file是否为空 then echo "Error please input a filename" exit 1 elif [ ! -e "$file" ] ; then # 判断file的值是否存在 echo "Your input is not a file!" exit 2 elif [ -f "$file" ] ; then echo "is file" elif [ -d "$file" ] ; then echo "is directory" else echo "$file is an other file!" fi
相关文章推荐
- ubuntu(linux)下source、sh、bash、./执行脚本的区别
- shell中的大括号,小括号语法分别概述
- PASSION之初始SHELL
- Shell技巧
- WinAPI: ShellExecute - 打开外部程序或文件
- shell学习三十二天----read读取一行
- Execute Shell Script 正常, 但 Crontab execute fail
- 一波实用的Bash Shell整理
- Linux常用的shell命令
- 用ShellExecuteEx和TerminateProcess打开和关闭文件
- 用shell脚本生成日志文件
- linux下shell显示-bash-4.1#不显示路径解决方法
- 登录shell与非登录shell读取文件过程
- Shell脚本实现的基于SVN的代码提交量统计工具
- shell脚本(一)
- Shell脚本实现的基于SVN的代码提交量统计工具
- 一波实用的Bash Shell整理
- Linux常用的shell命令
- 易宝典文章——玩转Office 365中的Exchange Online服务 之五 怎样利用PSl连接Exchange Online实现管理
- shell十三问(转)