shell脚本 if语句学习
if语句的结构分为三种:1: 单分支的if语句
单分支的if语句是最简单的选择结构,这种结构只判断指定的条件,当“条件成立”时执行相应的操作。否则不做任何操作,语句格式如下:
[color=#ff0000]if 条件测试命令[/color]
[color=#ff0000]then[/color]
[color=#ff0000] 命令序列[/color]
[color=#ff0000]fi [/color]
[color=#ff0000] [/color]
[color=#ff0000] [/color][color=#000000]上面语句中,首先通过if判断条件测试命令的返回值是否为0(条件成立),如果是,则执行then后面的一条过多条可执行语句,一直到fi 为止表示结束:如果返回值不为0(也就是不成立),则直接去执行fi后面的语句;[/color]
其实脚本是很容易学的,,条件测试 之后当条件成立时就可以执行你自己写的语句,,语句其实就是一些常用的linux的命令。。。
[color=#000000] [color=#ff0000] 例如[/color]: 我们想每隔五分钟监测一次MySQL服务进程的运行状态,若发现MySQL进程已经终止,则在/var/log/messages 文件中追加写入日志信息(包括时间),并重新启动MySQL服务, 如果开启则不在任何操作。[/color]
[color=#ff0000][color=#000000] 思路:首先先要写个脚本用于监测。在做个任务计划,好让脚本每2五分钟执行一次。[/color] [/color]
[color=#ff0000]先写脚本:[/color]
[color=#ff0000]vi mysql.sh[/color]
[color=#ff0000]#!/bin/bash[/color]
[color=#ff0000]service mysqld status &> /dev/null [/color][color=#000000]//查看服务的运行状态并不显示在屏幕上[/color]
[color=#ff0000]if [ $? -ne 0 ] [/color]
[color=#ff0000] then[/color]
[color=#ff0000]ehco " AT time: `date` : mysql server is down ." >> /var/log/messages[/color] //保存日志
[color=#ff0000]service mysqld restart [/color]//重新启动系统
[color=#ff0000]fi [/color][color=#000000] //结束[/color]
不要忘了把脚本增加执行权限 chmod o+x mysql.sh
我们在做一个任务计划让系统自动没五分钟监测一次
[color=#ff0000]crontab -e [/color]
[color=#ff0000]*/5 * * * * /root/mysql.sh[/color]
[color=#000000]这个脚本和计划任务就完成了 就达到了 我们想要的结果。 简单吧 ![/color]
下面我们学习一下双分支的if语句:
2: 双分支的if语句
双分支的if语句使用了两路命令操作。在条件成立或不成立的时候分别执行不同的命令序列,,格式如下:
[color=#ff0000]if 条件测试命令 [/color]
[color=#ff0000]then [/color]
[color=#ff0000] 命令序列1 [/color]
[color=#ff0000]else[/color]
[color=#ff0000] 命令序列2[/color]
[color=#ff0000]fi [/color]
[color=#000000]意思是通过条件测试命令的值为成立还是不成立,,如果成立就执行then下面的语句,然后跳转到fi结束,,如果不成立就执行else后面的语句一直到fi结束。[/color]
这个应该也是很好理解的,,就是分成立执行的语句和不成立执行的语句。在系统管理的时候也会经常遇到。。
[color=#ff0000]例如:[/color][color=#000000]如果我们系统当前登录到系统中的用户数量,并判断是否超过三个,若是侧显示实际数量并给出警告,,否则列出登录的用户账户名称及所在终端。[/color]
分析: 首先我们要统计用户的数量,在和3进行比较,在根据要求来做。
[color=#ff0000]vi yonghu.sh[/color]
[color=#ff0000]#!/bin/bash[/color]
[color=#ff0000]username= ` who | wc -l` [/color] \\这是定义一个变量 检查登录到系统的用户数量给username
[color=#ff0000]if [ $username -gt 3 ] ; then[/color]
[color=#ff0000]echo "ALert,too many login users ( total: $username)"[/color] //如果大于3个用户侧显示具体几个用户
[color=#ff0000]else [/color] //当条件不成立的时候执行下面的语句
[color=#ff0000]echo "login user:"[/color]
[color=#ff0000]who | awk `{print $1 ,$2}`[/color] //显示登录系统的用户名和终端
[color=#ff0000]fi[/color]
[color=#000000]上面的 then可以跟在if后一起写 用;分开 表示一次执行两个命令 [/color]
[color=#000000]之后在给脚本一个权限就可以证实是否超过3个用户还是小于3个用户。双分支的if语句有时候还不能满足管理的要求这时候就出来了多分支的if 语句[/color]
3: 多分支的if语句
if语言能够嵌套使用,进行多次判断,(例如判断某学生的得分是否及格,若及格侧再判断是否高于90分…………等等)格式如下
[color=#ff0000]if 条件测试1[/color]
[color=#ff0000]then[/color]
[color=#ff0000]命令序列1 [/color]
[color=#ff0000]elif 条件测试2[/color]
[color=#ff0000]then[/color]
[color=#ff0000]命令序列1 [/color]
[color=#ff0000]else[/color]
[color=#ff0000]命令序列3[/color]
[color=#ff0000]fi [/color]
[color=#ff0000][/color]
[color=#000000]上面的语句只嵌套了一个elif,实际上可以嵌套多个elif语句,使用多分支的if语句结构时,会依次对多个条件进行测试,一旦条件成立时即退出选择结构,否则将执行相应的命令序列后再跳转到fi ,结束判断。。[/color]
[color=#000000]我们还以mysql服务的进程来进行讲解[/color]
[color=#000000][color=#ff0000]例如[/color]: 检查MySQL进程是否已经存在,若存在则输出“MySQLd service is running”[/color]
[color=#000000]如果不存在 则检查是否存在 /etc/rc.d/init.d/mysqld 可执行脚本,存在则启动 MySQLd服务。 如果都不存在 则提示“no mysqld file”.[/color]
分析:首先我们要检查MySQLd的进程是否存在 用 pgrep 检查 返回值在和0比较
[color=#ff0000]vi mysqld.sh[/color]
[color=#ff0000]#!/bin/bash[/color]
[color=#ff0000]pgrep mysqld &> /dev/null [/color][color=#000000]//检查进程[/color]
[color=#ff0000]if [ $? -et 0 ] :then //[/color][color=#000000]比较[/color]
[color=#ff0000]echo "mysqld service is running" [/color][color=#000000]//如果上面成立则输出[/color]
[color=#ff0000]elif [ -x "/etc/rc.d/init.d/mysqld" ]; then [/color][color=#000000]//上面的条件不成立在测试[/color]
[color=#ff0000]service mysqld start [/color][color=#000000]// 如果有这个脚本就启动[/color]
[color=#000000][color=#ff0000]else [/color] //上面两个都没有成立 则执行else后面的语句[/color]
[color=#ff0000]echo "no mysqld script file" [/color]
[color=#ff0000]fi [/color]
[color=#ff0000][/color]
[color=#000000]if 的语句就全都将完了 之后可以根据自己的需求可以编写一些脚本来完成操作啦![/color]
是不是也很好理解。。 DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
页:
[1]