shell 自动化运维 —— 循环 ( for while until )

一、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 [email protected]

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 允许用户交互

 

你可能感兴趣的:(shell,linux,编程语言,运维,ssh)