shell脚本(二)--if流程控制语句和for循环语句的使用

理论部分:shell

一、在简单的脚本中各条语句按顺序执行,从而实现自动化的管理,vim

顺序单一执行太过机械化,不够“智能”,难以实现更加灵活的系统任务。服务器

例如:批量安装软件包ide

100台机器 50台已安装 50台未安装测试

二、shell环境根据$?来判断是否执行成功,当返回值为0时表明执行成功。若是是非0则表明执行异常通常为1或者为1到127之间的整数。spa

三、经常使用的逻辑测试3d

&&:逻辑与,“而且并且”的意思 知足两个条件日志

||:逻辑或,“或者”的意思 知足两个条件中的一个blog

! : 逻辑否 ip


逻辑与&&是指而且并且的意思,只有先后两个条件都成立时才会返回值为0(成立)不然就是非0(不成立)

逻辑与-实例

clip_image002

先进入到/usr目录在显示当前所在目录,若是cd没有进入目录后面的命令是不会执行的

clip_image004

逻辑或-实例

clip_image006

实战—1

咱们经过逻辑表达判断一下两个变量的值

clip_image007

clip_image009

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变量是定义当前系统的语言属于环境变量

取反就是不等于的意思

clip_image011

实战2—

-z为对于为赋值的变量进行测试

clip_image013


2-1-单分支if语句的格式

if 条件测试操做

then

命令序列

fi

clip_image015

单分支的结构很是简单,条件成立就执行then命令序列,条件不成立则fi结束

实战—1

clip_image016

clip_image018

2-2-双分支IF语句

双分支的选择结果,要求针对条件成立,条件不成立两种状况分别执行不一样的操做

语法结构

if 条件测试操做

then(条件成立执行)

命令序列1

else(不然,条件不成立,则执行)

命令序列2

fi

clip_image020



实战1—


咱们编写一个连通性测试脚本经过位置参数$1提供目标主机地址,而后根据ping检测结果给出相应提示

clip_image022

-c ping包的次数

-i ping包的间隔

-w 超时的时间间隔

脚本解释:若是if判断为0则接下来执行then输出目标主机up

若是不为0则执行else输出目标主机down

clip_image024


2-3-多分支if语句

因为if语句能够根据测试结果的成立,

不成立分别执行,因此能够嵌套使用,进行屡次判断.

if 条件测试操做1

then

命令序列1

elif 条件测试2

then

命令序列2

else

命令序列3

fi



clip_image026

多分支if语句应用

1. 编写一个成绩分档脚本gradediv.sh根据输入不一样的分数来区分优秀、合格、不合格三挡

vim gradediv.sh

clip_image028

首先判断是否大于85 小于 100 若是符合则输出优秀并结束判断

若是小于85 而且大于 60 为优秀 执行then 输出合格

不然 都执行else 其他的都是不合格继续

执行的结果

clip_image030

实战部分

一、编写脚本程序用于监视系统服务httpd的运行状态,要求以下

当服务状态失败时在"/var/log/httpderr.log"文件中记入日志信息。

自动将状态失败的httpd服务从新启动。若重启httpd服务失败,测尝试从新启动服务器主机

clip_image032

vim httpd.sh

clip_image034

clip_image036

查看 /var/log/httpderr.log

clip_image038

二、编写uname.sh脚本判断当前系统的内核主次版本若大于2.4则输出当前版本不然输出提示当前版本过低

过滤主版本号

clip_image040

过滤出次版本号

clip_image042

vim kernel.sh

clip_image044

执行:

clip_image046

3-1-for循环语句的结构

使用for循环语句时,须要指定一个变量及可能的取值列表。跟对不一样的取值,执行相同的命令序列直到变量的值取完遍退出循环。取值列表称为for语句的执行条件

for语句执行的语法结构

for 变量名 in 取值列表

do

命令序列

done

其种 变量名能够自定义,do里面还能够嵌套多个if语句done结束循环

in乃是关键字,从哪里取值,多个取值之间使用空格隔开

clip_image048

实验环境:有些时候咱们的系统须要多个用户的时候,而且用户名使用员工的拼音为用户名这是也可使用for循环进行建立并设置初始密码

咱们先从人事部取来员工的姓名列表将这个列定义为取值列表

咱们这里模拟建立一个

这些用户就做为取值,都是一些厂家的名字.

vim users.txt

clip_image049

clip_image050

查看建立成功的用户

clip_image052

编辑一个脚本 添加用户vim adduser.sh

首先定义一个变量做为取值列表

将取值列表赋予变量user

嵌套一个if语句判断用户是否存在,若是存在则输出用户已存在,不然执行else的命令序列进行添加用户而且设置密码实现取值循环

if判断使用grep awk 过滤出/etc/passwd的第一个字段

使用user_a与取值列表进行比较若是等于则输出用户已存在,若是不等于则执行else的命令序列


clip_image053

执行脚本:sh –x adduser.sh

clip_image054

再次执行

clip_image055

输出了用户已存在,

若要删除刚刚建立的用户能够编写脚本

vim deluser.sh

clip_image057

执行:

clip_image058

好了这就是批量建立用户和批量删除用户

案例根据ip地址列表检测主机状态

创建一个ip地址取值列表

vim ip.txt

clip_image059

vim ping.sh

clip_image061

判断一下当前主机是否存活,若是存活 输出 host is up 不然输出 host is down

clip_image063

这就是简单的for循环语句的应用

相关文章
相关标签/搜索