Shell中控制执行流

1.for 循环

for 定义变量
do 使用变量,执行动作
done 结束标志
  1. 格式1:
    在这里插入图片描述
    for WESTOS in `seq 2 2 10`      第二个2是跨度
    在这里插入图片描述
  2. 格式2:
    在这里插入图片描述
    在这里插入图片描述
    最后一行表示 for 语句不可以将参数传到外界。
  3. 格式3:

在这里插入图片描述
在这里插入图片描述
4. 格式4:
在这里插入图片描述
在这里插入图片描述

2.while 循环

如果条件成立,就做什么动作
while不同于 && 的地方在于while是循环的。

用法:

while ture        条件为真
do           条件成立所作循环动作
done

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
sh while.sh 0
在这里插入图片描述

3.until

和 while 相反,当条件不成立时,执行什么动作。

用法:

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

4.if

多条件判断,用法:

if
then
elif
then
...        ...表示可以有很多个 elif
else
fi

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

5.case

用法:

case $1 in
	word1|WORD1)		匹配这些字符
	action1
	;;					分隔符
	word2|WORD2)		匹配这些字符
	action2
	;;
	*)					匹配剩下所有的
	action3
esac

在这里插入图片描述
效果:
在这里插入图片描述

6.expect

问题脚本

#!/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                 \转译单引号特殊字符

在这里插入图片描述
应答脚本
vim /mnt/answer.exp

#!/usr/bin/expect
set timeout 1                                设置最长等待时间为1s
set NAME [ lindex $argv 0 ]					 后面跟的第一串字符为NAME值
set AGE [ lindex $argv 1 ]					 后面跟的第二串字符为AGE值
set OBJ [ lindex $argv 2 ]					 后面跟的第三串字符为OBJ值
set FEEL [ lindex $argv 3 ]					 后面跟的第四串字符为FEEL值
spawn /mnt/ask.sh							 监控/mnt/ask.sh脚本,找出其中的问题
expect {									 包含
"name" { send "$NAME\r";exp_continue }		 包含 name 字符时发送$NAME的值
"old" { send "$AGE\r";exp_continue }
"objective" { send "$OBJ\r";exp_continue }
"ok" { send "$FEEL\r" }
}
expect eof									 结尾

效果:
在这里插入图片描述

7.break,continue,exit

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

脚本:
在这里插入图片描述
在这里插入图片描述
hello 和 5 都打印出来了,当我们在脚本中加入continue时:
在这里插入图片描述
显示 5 的这条命令 ( echo $WESTOS ) 直接就中断了,开始了下一轮的循环。
在这里插入图片描述


当为 break 时:
在这里插入图片描述
在这里插入图片描述
循环就终止了,值显示到5,但执行了循环外的 echo 动作。


当为exit时
在这里插入图片描述
在这里插入图片描述
直接退出脚本,循环外的命令也不执行了。

发布了41 篇原创文章 · 获赞 15 · 访问量 2856

猜你喜欢

转载自blog.csdn.net/thermal_life/article/details/105230644