shell 判断吗 可以多层if_shell脚本(二)--if流程控制语句和for循环语句的使用

理论部分:

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

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

例如:批量安装软件包

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

2、shell环境根据$?来判断是否执行成功,当返回值为0时代表执行成功。如果是非0则代表执行异常一般为1或者为1到127之间的整数。

3、常用的逻辑测试

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

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

!: 逻辑否

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

逻辑与-实例

09e09029293aa3ace6407decbca47293.png

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

da2b0417d1f54a52ddfb942527197794.png

逻辑或-实例

c841ce4f681018a8cb77dded4ebba4a7.png

实战—1

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

35e806db69dcb6349d9381736b286fb9.png

63c8a8a6ed7c4d1fd0091203ade24d5c.png

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

取反就是不等于的意思

5e9dcafd42a400a8032d7535ffb95f6d.png

实战2—

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

1938a006095711abed6ddb9b3179587a.png

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

if 条件测试操作

then

命令序列

fi

13456b96658b1acd30fc8f06ca8a0e01.png

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

实战—1

8d7ef850078c73437e9cca62bfe35c7b.png

f7af637e9a03439b16f09d59ff17db5e.png

2-2-双分支IF语句

双分支的选择结果,要求针对条件成立,条件不成立两种情况分别执行不同的操作

语法结构

if 条件测试操作

then(条件成立执行)

命令序列1

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

命令序列2

fi

9ad16563e2826214951549505ff200a0.png

实战1—

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

76cc46b9558ee0f122a4e4bedbcdced0.png

-c ping包的次数

-i ping包的间隔

-w超时的时间间隔

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

如果不为0则执行else输出目标主机down

fa0c8d6f05326489c6f46e5607c05b02.png

2-3-多分支if语句

由于if语句可以根据测试结果的成立,

不成立分别执行,所以可以嵌套使用,进行多次判断.

if 条件测试操作1

then

命令序列1

elif 条件测试2

then

命令序列2

else

命令序列3

fi

3ae4568eb599c10cb923486b24f39a72.png

多分支if语句应用

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

vim gradediv.sh

af036e3fc49dca84ba0f5db00df53ee5.png

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

如果小于85 并且大于 60 为优秀 执行then 输出合格

否则 都执行else 其余的都是不合格继续

执行的结果

88bc5a2a0e2454c633c922dfcf805684.png

实战部分

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

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

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

948ce091410d13cdcb7eb5a0300fb9fb.png

vim httpd.sh

f203016e9b7b88fc25f4a2a148928695.png

1ba58e9803f4b9ad1819d2092efdc512.png

查看 /var/log/httpderr.log

d151564ce7039ab658cfd670bdc07b56.png

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

过滤主版本号

6049548772392fa2ac717eb1e0175600.png

过滤出次版本号

bd1c82b88db76517f22934865d9f20fb.png

vim kernel.sh

fe026133425b55a1b9077f27031f94fc.png

执行:

102ce2730aac0b70e9c35822b8f15b2f.png

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

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

for语句执行的语法结构

for 变量名 in 取值列表

do

命令序列

done

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

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

484990082fb0e0281b72edc6a4b511d7.png

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

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

我们这里模拟创建一个

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

vim users.txt

f583dd424012b7afd75b9c7f9ce034bd.png

09b4bece077e56725d2a1f922e684174.png

查看创建成功的用户

fa796edf100e20b750ac0a4a4651a775.png

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

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

将取值列表赋予变量user

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

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

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

f7d7307e59a5f5fbf8b2fc252478e69a.png

执行脚本:sh –x adduser.sh

bab3bcc4a06f71496e10a5be6f9bcee4.png

再次执行

aeef1d23fdbb53ab4cb86c3337755c11.png

输出了用户已存在,

若要删除刚刚创建的用户可以编写脚本

vim deluser.sh

8f5d064d0311630eb38b8d68eae6a543.png

执行:

2f8f97f2c8cc85b7023073ac3e30088a.png

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

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

建立一个ip地址取值列表

vim ip.txt

bac53d4463b2748fc3e2fbb053a9774d.png

vim ping.sh

f557e2ceac96c5e738d8e9320564a0b2.png

判断一下当前主机是否存活,如果存活输出host is up否则输出host is down

3f6572ac4da414fb560ea3b2efdbeb0e.png

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值