shell的执行流控制(for+while+until+if+case的使用)

本文详细介绍了Shell脚本中的五种控制流程:for循环,包括格式1、2、3、4的讲解和实践;while循环及其应用;until循环的简要说明;if语句的用法和脚本练习;case语句的执行特点及练习。此外,还涉及了expect用法,解释了如何自动回答脚本问题,并通过实战示例展示了break、continue和exit在脚本中的作用。
摘要由CSDN通过智能技术生成

1.for 循环

for定义变量
do使用变量,执行动作
done结束标志

【1】格式1:

#!/bin/bash
for WESTOS in `seq 2 2 10`    步长为2
do
	echo $WESTOS
done

在这里插入图片描述

【2】格式2:
在循环运行过程中,是不能把值传递出去的

for WESTOS in 1 2 3
do
	echo $WESTOS
done

当在done后加上echo $WESTOS时,使用sh -x进行查看
在这里插入图片描述

【3】格式3:

for WESTOS in {10..1}    倒叙,不可直接`seq 10 1`
do
	echo $WESTOS
done

在这里插入图片描述

【4】格式4:

for ((WESTOS=0;WESTOS<10;WESTOS++))    ++表示递增+1;--表示递减
do
	echo $WESTOS
done

两个(())的作用
在这里插入图片描述

脚本练习:
check_host.sh
用此脚本检测10台与您当前主机直连主机是否网络通常
如果网络通常请显示主机的ip列表

2.while

while ture条件为真
do条件成立所作循环动作
done结束标志

【1】条件成立进行循环

  • 脚本
    在这里插入图片描述
  • 结果
    在这里插入图片描述

3.until

until false条件为假
do条件不成立所作循环动作
done结束标志

用法参考上述while true,在此就不赘述了。

4.if

1)用法
if语句判断条件,一个语句完成后,其他的才不再查看

if
then
elif
then
...
else
fi

2)脚本练习:

  • 创建check_file.sh
  • 要求提示 please input filename: file
  • 当文件不存在时,显示:file is not exist
    -当是个文件时,显示 file is file
  • 当是目录时,显示:file is direcory
  • 此脚本会一直询问直到用户输入exit为止

在这里插入图片描述
在这里插入图片描述

5.case

1)用法

case $1 in
word1|WORD1)
action1
;;
word2|WORD2)
action2
;;
*)
action3
esac

2)练习:

  • -x可看出case只执行一次
    脚本:
    在这里插入图片描述
    结果:
    在这里插入图片描述
  • 与if语句实现进行对比
    脚本:
    在这里插入图片描述
    结果:
    在这里插入图片描述

脚本练习3:
system_watch.sh disk memory upload (每秒显示)

  • disk 监控磁盘使用情况 (df查看)
  • memory 监控内存使用情况 (free)
  • upload 监控启动负载 (uptime)
    在这里插入图片描述
    在这里插入图片描述
    sh system_watch.sh disk
    在这里插入图片描述
    sh system_watch.sh memory
    在这里插入图片描述
    sh system_watch.sh uptime
    在这里插入图片描述

expect用法

expect自动应答命令(用于交互式命令的自动执行)
set timeout 1执行等待1秒,一秒后继续向下执行
set NAME [ lindex $argv 0 ]定义变量
sapwn监控程序
send发送问题答案给交互命令
\r回车
exp_continue继续回答下面的
expect eof表示回答完那些问题后,退出expect环境
interact问题回答完后留在交互界面

1)问题脚本

#!/bin/bash
read -p "what's your name:" NAME
read -p "How old are you: " AGE 
read -p "Which objective: " OBJ
read -p "Are you ok? " OK
echo $NAME is $AGE\'s old study $OBJ feel $OK

在这里插入图片描述
直接执行,需要手动输入问题的答案
在这里插入图片描述

2)应答脚本

  • yum install expect -y进行安装

  • vim answer.exp 此时就不是以.sh结尾了
    在这里插入图片描述

  • 使用expect调用,记住必须chmod +x ask.sh给可执行权限
    在这里插入图片描述
    在这里插入图片描述
    使用expect,即使ask.sh里面包含的内容不全(注释掉年龄),也不会影响正常运行
    在这里插入图片描述

脚本练习
auto_ssh 192.168.0.1 westos
可以自动连接目标主机当目标主机网络不通时报错

7.break,continue,exit

1)含义

命令作用
contiue终止当此次前循环提前进入下个循环
break终止当前所在语句所有动作进行语句外的其他动作
exit脚本退出

练习:
【1】continue此次循环退出,提前进入下次循环
当没有continue时 5 也会显示出来;当使用cotinue时,仅退出了显示5,剩下的都继续执行了。
在这里插入图片描述

在这里插入图片描述

【2】break 所在循环退出
退出了for循环,但是还会执行for循环之外的命令
在这里插入图片描述
在这里插入图片描述

【3】exit
当条件成立时,脚本自动退出。剩下的命令也就不执行了。我们可以看到没有执行echo end scripts
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值