理论部分:
1、在简单的脚本中各条语句按顺序执行,从而实现自动化的管理,
顺序单一执行太过机械化,不够“智能”,难以实现更加灵活的系统任务。
例如:批量安装软件包
100台机器 50台已安装 50台未安装
2、shell环境根据$?来判断是否执行成功,当返回值为0时代表执行成功。如果是非0则代表执行异常一般为1或者为1到127之间的整数。
3、常用的逻辑测试
&&:逻辑与,“并且而且”的意思 满足两个条件
||:逻辑或,“或者”的意思 满足两个条件中的一个
! : 逻辑否
逻辑与&&是指并且而且的意思,只有前后两个条件都成立时才会返回值为0(成立)否则就是非0(不成立)
逻辑与-实例
先进入到/usr目录在显示当前所在目录,如果cd没有进入目录后面的命令是不会执行的
逻辑或-实例
实战—1
我们通过逻辑表达判断一下两个变量的值
2、数值的比较
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)
格式 [ 数值1 操作符 数值2 ]
3.字符串比较
= 字符串内容相同
!= 字符串内容不同
-z 字符串内容为空
! 取反的意思.
实战1--
若要判断当前系统的语言环境,当发现不是en.US时输出提示信息“$LANG”
$LANG变量是定义当前系统的语言属于环境变量
取反就是不等于的意思
实战2—
-z为对于为赋值的变量进行测试
2-1-单分支if语句的格式
if 条件测试操作
then
命令序列
fi
单分支的结构非常简单,条件成立就执行then命令序列,条件不成立则fi结束
实战—1
2-2-双分支IF语句
双分支的选择结果,要求针对条件成立,条件不成立两种情况分别执行不同的操作
语法结构
if 条件测试操作
then(条件成立执行)
命令序列1
else(否则,条件不成立,则执行)
命令序列2
fi
实战1—
我们编写一个连通性测试脚本通过位置参数$1提供目标主机地址,然后根据ping检测结果给出相应提示
-c ping包的次数
-i ping包的间隔
-w 超时的时间间隔
脚本解释:如果if判断为0则接下来执行then输出目标主机up
如果不为0则执行else输出目标主机down
2-3-多分支if语句
由于if语句可以根据测试结果的成立,
不成立分别执行,所以可以嵌套使用,进行多次判断.
if 条件测试操作1
then
命令序列1
elif 条件测试2
then
命令序列2
else
命令序列3
fi
多分支if语句应用
1. 编写一个成绩分档脚本gradediv.sh根据输入不同的分数来区分优秀、合格、不合格三挡
vim gradediv.sh
首先判断是否大于85 小于 100 如果符合则输出优秀并结束判断
如果小于85 并且大于 60 为优秀 执行then 输出合格
否则 都执行else 其余的都是不合格继续
执行的结果
实战部分
1、编写脚本程序用于监视系统服务httpd的运行状态,要求如下
当服务状态失败时在"/var/log/httpderr.log"文件中记入日志信息。
自动将状态失败的httpd服务重新启动。若重启httpd服务失败,测尝试重新启动服务器主机
vim httpd.sh
查看 /var/log/httpderr.log
2、编写uname.sh脚本判断当前系统的内核主次版本若大于2.4则输出当前版本否则输出提示当前版本太低
过滤主版本号
过滤出次版本号
vim kernel.sh
执行:
3-1-for循环语句的结构
使用for循环语句时,需要指定一个变量及可能的取值列表。跟对不同的取值,执行相同的命令序列直到变量的值取完遍退出循环。取值列表称为for语句的执行条件
for语句执行的语法结构
for 变量名 in 取值列表
do
命令序列
done
其种 变量名可以自定义,do里面还可以嵌套多个if语句done结束循环
in乃是关键字,从哪里取值,多个取值之间使用空格隔开
实验环境:有些时候我们的系统需要多个用户的时候,并且用户名使用员工的拼音为用户名这是也可以使用for循环进行创建并设置初始密码
我们先从人事部取来员工的姓名列表将这个列定义为取值列表
我们这里模拟创建一个
这些用户就作为取值,都是一些厂家的名字.
vim users.txt
查看创建成功的用户
编辑一个脚本 添加用户vim adduser.sh
首先定义一个变量作为取值列表
将取值列表赋予变量user
嵌套一个if语句判断用户是否存在,如果存在则输出用户已存在,否则执行else的命令序列进行添加用户并且设置密码实现取值循环
if判断使用grep 和awk 过滤出/etc/passwd的第一个字段
使用user_a与取值列表进行比较如果等于则输出用户已存在,如果不等于则执行else的命令序列
执行脚本:sh –x adduser.sh
再次执行
输出了用户已存在,
若要删除刚刚创建的用户可以编写脚本
vim deluser.sh
执行:
好了这就是批量创建用户和批量删除用户
案例根据ip地址列表检测主机状态
建立一个ip地址取值列表
vim ip.txt
vim ping.sh
判断一下当前主机是否存活,如果存活 输出 host is up 否则输出 host is down
这就是简单的for循环语句的应用
原文地址:http://blog.51cto.com/rescue/2119775