一、shell 循环 —— for
1、语法结构
for 变量名 in 取值列表
do
循环体
done
取值列表:
(1)for i in {1..10}
(2)for i in $(seq 1 10)
(3)for i in `seq 10`
二、shell 循环 —— while
1、while 语法结构
while语句结构(死循环/逐行处理文件)
while 条件测试
do
循环体
done
==当条件测试成立(条件测试为真),执行循环体
三、shell 循环 —— until
1、until 语法结构
二、until语法结构
until 条件测试
do
循环体
done
==当条件测试成立(条件测试为假视为成立),执行循环体
需求:每个一秒循环一个数字
#!/bin/bash
until [[ $i -eq 14 ]]
do
let i++
sleep 1
echo $i
done
需求:
每隔5秒查看aofa用户是否登录,循环往复。
如果该用户登录,请显示登录并退出监控程序;
否则显示当前时间,并输出aofa尚未登录
#!/bin/bash
until who | grep "^haha" &> /dev/null
do
echo "$(date) haha not login"
sleep 5
done
echo "aofa login"
exit 0
循环总结
固定 :for
逐行:while
逐行/不固定:while until
四、shell 循环 —— expect
1、Expect工作原理
(1)Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。
(2)Expect需要Tcl编程语言的支持,要在系统上运行Expect必须首先安装Tcl。
(3)脚本由一系列expect-send对组成:expect等待输出中输出特定的字符,通常是一个提示符,然后发送特定的响应。
(4)解决人机交互的问题
(5)安装 yum install -y expect tcl tclx tcl-devel
2、示例1:通过expect解决ssh交互问题
(1)编写脚本
#!/usr/bin/expect
spawn ssh root@10.8.162.14
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "666666\r" };
}
interact
解释
spawn expect 内部命令,启动一个shell程序。
expect 期望哪些内容
yes/no 就send发送 yes ,\r 表示回车
password 就send发送 centos
exp_continue,跳过循环,就继续下一条语句。
interact 允许用户交互