shell 的执行流控制

一、for语句

  • 作⽤:为循环执⾏动作
    for语句结构:for 定义变量 | do 使⽤变量,执⾏动作 | done 结束标志
  • for语句的基本格式:
    1、测试主机是否能ping通
    当处理多个对象时,使用循环语句,可以把重复的事情自动完成**(格式一)**
    在这里插入图片描述
    在这里插入图片描述
    格式二:{ }连续选择
    格式三:seq连续选择的命令
    在这里插入图片描述
    seq设置步长为2
    在这里插入图片描述
    格式四:
    for ((WESTOS=0;WESTOS<10;WESTOS++))
    do
    echo $WESTOS
    done
  • 编写脚本,测试主机能否ping通
    在这里插入图片描述
    在这里插入图片描述
    可以在运行脚本时,在脚本后面接相应的主机IP
    在这里插入图片描述
    for 语句只有最后一个值不会被覆盖,此时$HOST_ID 的值为88
    在这里插入图片描述
  • 2、用户建立脚本
    执行create_user.sh userlist ,会建立userlist中的用户
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 3、用户建立脚本
    执行create_user.sh userlist ,会建立userlist中的用户,设定userlist中用户的密码为passlist中的密码
    在这里插入图片描述
    MAX_LINE表示userlist文件的行数
    USERNAME=sed -n ${line_Number}p $1 :第一个文件的第i行
    PASSWORD=sed -n ${line_Number}p $2 :第二个文件的第i行
    在这里插入图片描述
    打印行号: sed -n ‘=’ passlist
    $= 计算文本行数
    在这里插入图片描述
    用户列表文件和密码文件
    在这里插入图片描述
    在这里插入图片描述
    测试usera用户密码正确
    在这里插入图片描述

二、条件语句

  • 1、while … do 语句
    作⽤: 条件为执⾏动作;
    语句结构: while ture | do | done
    在这里插入图片描述
  • 2、until…do 语句
    作⽤: 条件为执⾏动作;
    语句结构 :until false | do | done
    在这里插入图片描述
  • 3、if…then…elif…then…else…fi 语句
    作⽤: 多次判定条件执⾏动作;
    语句结构 :if then | elif then … else | fi
    在这里插入图片描述
    脚本练习[1]
    固定随机数:先取出一个随机数,将随机数赋值给变量
    1.等于随机数, 输出Congratuation;
    2.不等于随机数, 对不起没猜中;
    3.直到exit.
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    脚本练习[2]
    固定随机数:先取出一个随机数,将随机数赋值给变量
    1.等于随机数, 输出Congratuation,并退出;
    2.不等于随机数, 提示大/小;
    3.直到exit.
    在这里插入图片描述
    在这里插入图片描述

三、case选择语句

  • 作用
    对条件识别,符合哪个,执行哪个动作
    同级别,执行效率相同,点名机制
    结构:
    case $1 in
    word1|WORD1)
    action
    ;;
    word2|WORD2)
    action
    ;;

    使用sh -x 调试脚本,可以看到此脚本中westos被检测执行了一次,linux执行了两次
    在这里插入图片描述
    使用case语句,可以对条件识别,符合哪个,执行哪个动作,执行效率相同
    在这里插入图片描述
    脚本练习【1】
    1、输入动作ACTION,当输入create时,提示输入用户名,若用户存在则提示已存在重新输入用户名;若用户不存在,则提示输入用户密码,建立用户;若输入的用户名为exit,则提示重新输入ACTION;
    2、输入动作ACTION,当输入delete时,提示输入用户名,若用户不存在则提示已存在重新输入用户名;若用户存在,则删除该用户;若输入的用户名为exit,则提示重新输入ACTION;
    2、输入动作ACTION,当输入exit时,退出脚本执行
    方法一:
    在这里插入图片描述
    在这里插入图片描述
    测试脚本
    在这里插入图片描述
    在这里插入图片描述
    方法二:
    break :退出本次循环,进入下个循环(ACTION)
    在这里插入图片描述
    在这里插入图片描述
    测试脚本
    在这里插入图片描述

四、break、continue、exit选择语句

  • contiue :终⽌当此次前循环提前进⼊下个循环
    break :终⽌当前所在语句所有动作进⾏语句外的其他动作
    exit :脚本退出
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

五、expect

  • 编写ask脚本
    在这里插入图片描述
    运行脚本,并回答ask脚本的问题
    在这里插入图片描述
    也可以用EOF进行回答;
    1、在shell脚本中,通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主Shell。EOF只是一个分界符(起始和结束的标志),当然也可以用abcde替换。
    2、当shell遇到<<时,它知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。
    在这里插入图片描述
    安装expect软件,它可以让一些需要交互的任务自动化地完成,相当于模拟了用户和命令行的交互操作。expect有自己的运行环境 /usr/bin/expect
    在这里插入图片描述
    编写expect应答脚本(最前面加#!/usr/bin/expect),\r表示换行,eof表示expect回答完之后环境退出,interact表示expect回答完之后环境不退出;
    spawn表示监控ask脚本
    在这里插入图片描述
    运行expect脚本
    在这里插入图片描述
    但若将ask脚本注释掉一行,此时脚本运行会回答错乱,这是因为多个expect回答了一个问题
    在这里插入图片描述
    编辑answer文件,修改为一个expect回答问题,exp_continue:继续用expect回答问题
    在这里插入图片描述
    脚本运行脚本运行没有回答错乱
    在这里插入图片描述
    也可以采用手动方式赋予答案,timeout 5 :当expect应答出现问题,最多等待5s跳过;argv 0:answer.exp脚本后跟的第一个字符串
    在这里插入图片描述
    运行脚本
    在这里插入图片描述
    将expect与shell脚本融合在一起,将代码定向到expect环境
    在这里插入图片描述
    此时可以使用sh运行脚本
    在这里插入图片描述
    脚本练习【1】
  • 1.检测 172.25.254.70-172.25.254.73 网络是否开启;
    2.如果网络正常请生成解析列表 hosts_list;
    格式如下:
    ip 主机名称
    例如: 172.25.254.1 为开启状态主机名为 westos_student1.westos.org
    在这里插入图片描述
    运行成功
    在这里插入图片描述
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值