理论部分:shell
一、在简单的脚本中各条语句按顺序执行,从而实现自动化的管理,vim
顺序单一执行太过机械化,不够“智能”,难以实现更加灵活的系统任务。服务器
例如:批量安装软件包ide
100台机器 50台已安装 50台未安装测试
二、shell环境根据$?来判断是否执行成功,当返回值为0时表明执行成功。若是是非0则表明执行异常通常为1或者为1到127之间的整数。spa
三、经常使用的逻辑测试3d
&&:逻辑与,“而且并且”的意思 知足两个条件日志
||:逻辑或,“或者”的意思 知足两个条件中的一个blog
! : 逻辑否 ip
逻辑与&&是指而且并且的意思,只有先后两个条件都成立时才会返回值为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 其他的都是不合格继续
执行的结果
实战部分
一、编写脚本程序用于监视系统服务httpd的运行状态,要求以下
当服务状态失败时在"/var/log/httpderr.log"文件中记入日志信息。
自动将状态失败的httpd服务从新启动。若重启httpd服务失败,测尝试从新启动服务器主机
vim httpd.sh
查看 /var/log/httpderr.log
二、编写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循环语句的应用