shell里的if语句详解

来源:互联网 发布:ipad软件商店打不开 编辑:程序博客网 时间:2024/05/18 03:56
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  的语句就全都将完了 之后可以根据自己的需求可以编写一些脚本来完成操作啦!
是不是也很好理解。。
0 0