Shell的执行流控制

目录

1.for语句

2.条件语句


1.for语句

作用为循环执行动作

for语句的结构

for        定义变量

do        使用变量,执行动作

done    结束标志

do和done之间的命令称为循环体,执行次数和列表中常数或字符串的个数相同。for循环,首先将in后列表的第一个常数或字符串赋值给循环变量,然后执行循环体,以此执行,最后执行done命令后的命令序列。sheel支持列表for循环使用略写的计数方式,1~5的范围用{1..5}表示(大括号不能去掉,否则会当作一个字符串处理)

for语句的四种基本格式

格式1:

#!/bin/bash

for WESTOS in $(seq 1 2 10)

do

          echo $WESTOS

done

编写for.sh脚本

执行此脚本,如下 

格式2

for  WESTOS in westos linux lee

do

             echo $WESTOS

done

 

 

 格式3

for   WESTOS in {10..1}

do

              echo $WESTOS

done

 

格式4

for  ((WESTOS=0;WESTOS++))

do

             echo $westos

done

2.条件语句

(1)while...do语句

1.先对true进行判断,如果该条件成立,就进入循环,执行 while 循环体中的语句,也就是 do 和 done 之间的语句。这样就完成了一次循环。

2.每次执行到 done 的时候都会重新判断true是否成立,如果成立,就进入下一次循环,继续执行 do 和 done 之间的语句,若不成立,则结束整个 while 循环,执行 done 后面的其它 Shell 代码。

3.若刚开始true 就不成立,则程序就不会进入循环体,do 和 done 之间的语句就不会执行。

注意:在 while 循环体中必须有相应的语句使得true越来越趋近于“不成立”,只有这样才能最终退出循环,否则 while 就成了死循环,会一直执行下去,永无休止。(如下例子:此脚本将会持续执行)while 语句和 if...else 语句中的 condition 用法都是一样的,你可以使用 test 或 [] 命令,也可以使用 (()) 或 [[]]。

条件为真执行动作

语句结构:

while ture       条件为真

do                   条件成立所做的循环动作

done               结束

 

 

(2)until...do 语句

作用:提供循环执行,它与while循环相反, until循环将反复执行直到条件为真就结束循环,而while循环条件为假就结束循环。

语句结构

until false       条件为假

do                  条件为假执行动作

done              结束

(3)if...then...elif...then...else...fi 语句

作用: 多次判定条件执行动作

一.if的基本语法

1.if与 [(中括号)之间要有空格

2.[ ](中括号)与判断条件之间也必须有空格

3.[ ](中括号)与;(分号)之间不能有空格

二. 对字符串的判断

1.if [ str1=str2 ];then fi     当两个字符串相同时返回真

2.if [ str1!=str2 ];then fi    当两个字符串不相等时返回真

3.if [ -n str1 ];then fi       当字符串的长度大于0时返回真 (判断变量是否有值)

4.if [ -z str1 ];then fi       当字符串的长度为0时返回真

三.语句结构

if

then

elif

then

...

else

fi

 

(4)case语句

case $1 in

linux|LINUX|Linux)

echo westos

;;

westos|WESTOS|Westos)

echo linux

;;

*)

echo error

esac

 

 

(5)expect

expect是linux系统中用来实现自动化控制和测试的软件工具,可以把shell和expect理解为两种不同的脚本语言,expect有独自的语法、变量, 在实际工作中,我们运行命令、脚本或程序时,这些命令、脚本或程序都需要从终端输入某些继续运行的指令,而这些输入都需要人为的手工进行。而利用expect,则可以根据程序的提示,模拟标准输入提供给程序,从而实现自动化交互执行,例如执行shell脚本,需要从终端得到输入时(如ssh –l root ip),expect可以根据提示,模拟标准输入来实现交互脚本执行

例如:问题脚本

vim q.sh

#!/bin/bash

read -p "what's your name: " NAME

read -p "how old are you: " AGE

read -p "which subject your study: " OBJ

read -p "are you happy: " FEEL

echo $NAME is $AGE study $OBJ feel $FEEL

应答脚本

安装expect:dnf install expect -y

vim answer.exp

#!/usr/bin/expect

set timeout 2    等待2秒自动结束

set NAME [ lindex $argv 0 ]

set AGE [ lindex $argv 1 ]

set OBJ [ lindex $argv 2 ]

set FEEL [ lindex $argv 3 ]

spawn sh q.sh

expect {

"name" { send "$NAME\r";exp_continue }

"old" { send "$AGE\r";exp_continue }

"study" { send "$OBJ\r";exp_continue }

"happy" { send "$FEEL\r" }

}

expect eof(退出当前环境)或者(interact不退出当前环境)

 

运行测试 

 (6).break、continue、exit、return

contiue

终止当此次前循环提前进入下个循环

break

终止当前所在语句所有动作进行语句外的其他动作

exit

脚本退出

return

终止当前循环,退出当前所在的函数

例如:

for N in {1..10}

do

If [ “$N” = “4” ]

then

Echo luck number

Return/break/exit/continue

fi

done

echo end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值