您的位置:首页 > 运维架构 > Shell

shell脚本 if语句学习笔记

2010-08-29 15:12 711 查看
if语句的结构分为三种:

1: 单分支的if语句
单分支的if语句是最简单的选择结构,这种结构只判断指定的条件,当“条件成立”时执行相应的操作。否则不做任何操作,语句格式如下:
if 条件测试命令
then
命令序列
fi

上面语句中,首先通过if判断条件测试命令的返回值是否为0(条件成立),如果是,则执行then后面的一条过多条可执行语句,一直到fi 为止表示结束:如果返回值不为0(也就是不成立),则直接去执行fi后面的语句;

其实脚本是很容易学的,,条件测试 之后当条件成立时就可以执行你自己写的语句,,语句其实就是一些常用的linux的命令。。。
例如: 我们想每隔五分钟监测一次MySQL服务进程的运行状态,若发现MySQL进程已经终止,则在/var/log/messages 文件中追加写入日志信息(包括时间),并重新启动MySQL服务, 如果开启则不在任何操作。
思路:首先先要写个脚本用于监测。在做个任务计划,好让脚本每2五分钟执行一次。
先写脚本:
vi mysql.sh
#!/bin/bash
service mysqld status &> /dev/null //查看服务的运行状态并不显示在屏幕上
if [ $? -ne 0 ]
then
ehco " AT time: `date` : mysql server is down ." >> /var/log/messages //保存日志
service mysqld restart //重新启动系统
fi //结束

不要忘了把脚本增加执行权限 chmod o+x mysql.sh
我们在做一个任务计划让系统自动没五分钟监测一次
crontab -e
*/5 * * * * /root/mysql.sh
这个脚本和计划任务就完成了 就达到了 我们想要的结果。 简单吧 !
下面我们学习一下双分支的if语句:

2: 双分支的if语句
双分支的if语句使用了两路命令操作。在条件成立或不成立的时候分别执行不同的命令序列,,格式如下:
if 条件测试命令
then
命令序列1
else
命令序列2
fi
意思是通过条件测试命令的值为成立还是不成立,,如果成立就执行then下面的语句,然后跳转到fi结束,,如果不成立就执行else后面的语句一直到fi结束。
这个应该也是很好理解的,,就是分成立执行的语句和不成立执行的语句。在系统管理的时候也会经常遇到。。
例如:如果我们系统当前登录到系统中的用户数量,并判断是否超过三个,若是侧显示实际数量并给出警告,,否则列出登录的用户账户名称及所在终端。
分析: 首先我们要统计用户的数量,在和3进行比较,在根据要求来做。

vi yonghu.sh
#!/bin/bash
username= ` who | wc -l` \\这是定义一个变量 检查登录到系统的用户数量给username
if [ $username -gt 3 ] ; then
echo "ALert,too many login users ( total: $username)" //如果大于3个用户侧显示具体几个用户
else //当条件不成立的时候执行下面的语句
echo "login user:"
who | awk `{print $1 ,$2}` //显示登录系统的用户名和终端
fi
上面的 then可以跟在if后一起写 用;分开 表示一次执行两个命令
之后在给脚本一个权限就可以证实是否超过3个用户还是小于3个用户。双分支的if语句有时候还不能满足管理的要求这时候就出来了多分支的if 语句
3: 多分支的if语句
if语言能够嵌套使用,进行多次判断,(例如判断某学生的得分是否及格,若及格侧再判断是否高于90分…………等等)格式如下
if 条件测试1
then
命令序列1
elif 条件测试2
then
命令序列1
else
命令序列3
fi

上面的语句只嵌套了一个elif,实际上可以嵌套多个elif语句,使用多分支的if语句结构时,会依次对多个条件进行测试,一旦条件成立时即退出选择结构,否则将执行相应的命令序列后再跳转到fi ,结束判断。。
我们还以mysql服务的进程来进行讲解
例如: 检查MySQL进程是否已经存在,若存在则输出“MySQLd service is running”
如果不存在 则检查是否存在 /etc/rc.d/init.d/mysqld 可执行脚本,存在则启动 MySQLd服务。 如果都不存在 则提示“no mysqld file”.
分析:首先我们要检查MySQLd的进程是否存在 用 pgrep 检查 返回值在和0比较

vi mysqld.sh
#!/bin/bash
pgrep mysqld &> /dev/null //检查进程
if [ $? -et 0 ] :then //比较
echo "mysqld service is running" //如果上面成立则输出
elif [ -x "/etc/rc.d/init.d/mysqld" ]; then //上面的条件不成立在测试
service mysqld start // 如果有这个脚本就启动
else //上面两个都没有成立 则执行else后面的语句
echo "no mysqld script file"
fi

if 的语句就全都将完了 之后可以根据自己的需求可以编写一些脚本来完成操作啦!
是不是也很好理解。。
本文出自 “我的网络学习历程” 博客,请务必保留此出处http://dong12.blog.51cto.com/2043131/384775
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: