Shell编程之免交户

expect

  • 一、多行重定向
    • 1.1 格式
    • 1.2 注意事项
    • 1.3 使用实例
  • 二、expect免交户
    • 2.1 expect概述
      • 2.1.1 定义
      • 2.1.2 安装
      • 2.1.3 命令格式
    • 2.2 相关命令
      • 2.2.1 spawn
      • 2.2.2 expect
      • .3 send
      • 2.2.3 set
      • 2.2.4 send_user
      • 2.2.5 exp_continue
      • 2.2.6 脚本解释器
      • 2.2.7 结束符
      • 2.2.8 exit
    • 2.3 运用实例
      • .1 免交互实现远程登录并且执行命令,执行结束自动退出。
      • .2 免交互实现传输文件
      • .3 综合应用

一、多行重定向

1.1 格式

语法格式

命令<<   标记


...(输入内容)

标记

1.2 注意事项

  • 标记可以使用任意的合法字符(通用的字符是EOF)
  • 结尾的标记一定要顶格写,前面不能有任何字符(包括空格)
  • 结尾的标记后面也不能有任何字符(包括空格)
  • 开头标记前后空格会被省略掉
  • 单引号 变量双引号 —

1.3 使用实例

#!/bin/bash
cat <<EOF >1.txt
1
2
3
4
4
5
EOF

Shell编程之免交户_第1张图片
Shell编程之免交户_第2张图片

二、expect免交户

2.1 expect概述

2.1.1 定义

expect是建立在tcl之上的一个工具,用于进行自动化控制和测试,解决shell脚本中交互相关的问题

2.1.2 安装

yum install -y expect

2.1.3 命令格式

expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]
expect
判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回·只能捕捉由spawn启动的进程的输出
·用于接收命令执行后的输出,然后和期望的字符串匹配send
·向进程发送字符串,用于模拟用户的输入·该命令不能自动回车换行,一般要加r (回车)

2.2 相关命令

命令 功能简介
spawn 启动一个新的进程
expect 等待输入中的特定模式或字符串
send 发送文本到当前spawn的进程
send_user 向用户显示文本消息
interact 允许用户与当前spawn的进程进行交互。
sleep 暂停执行一定的时间
eof 等待到达文件结束,结束符
exit 退出当前的expect脚本

2.2.1 spawn

开启一个会话、进程,并跟踪后续交互信息。

spawn <command> 

举个例子

#!/usr/bin/expect

#启动一个新的SSH会话,并连接到指定的主机
spawn ssh user@host
#等待看到 “password:” 提示符
expect "password:"
#发送密码到远程主机并回车
send "mypassword\r"
#等待看到命令行提示符
expect "$ "
#发送指定命令到远程主机并回车
send "ls -l\r"
expect "$ "
#发送退出命令并回车
send "exit\r"
expect eof

2.2.2 expect

  • 判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回·
  • 只能捕捉由spawn启动的进程的输出·
  • 用于接收命令执行后的输出,然后和期望的字符串匹配

.3 send

  • 向进程发送字符串,用于模拟用户的输入;
  • 该命令不能自动回车换行,需要配合\r使用,实现自动执行命令

2.2.3 set

设置超时时间,过期则继续执行后续,指令单位是秒,默认为10秒

otimeout-1表示永不超时

2.2.4 send_user

相当于echo.

2.2.5 exp_continue

允许expect继续向下执行指令。

2.2.6 脚本解释器

表明使用哪一个shell.
#!/usr/bin/expect

2.2.7 结束符

expect eof #表示执行结束

2.2.8 exit

退出脚本.

2.3 运用实例

.1 免交互实现远程登录并且执行命令,执行结束自动退出。

Shell编程之免交户_第3张图片

Shell编程之免交户_第4张图片

.2 免交互实现传输文件

#!/usr/bin/expect
spawn scp /etc/fstab 192.168.91.101:/mnt
expect {
  "yes/no" { send "yes\n";exp_continue }
  "password" { send "123123\n" }
}

expect eof 

# \r也行

.3 综合应用

#!/usr/bin/expect
spawn ssh 192.168.2.102
expect {
    "*assword:" {
        send "123123\r"
        exp_continue
    }
    "*yes/no" {
        send "yes\r"
        exp_continue
    }
    "# " {
        send "ls -l\r"
#如果是以普通用户,那么提示符替换为$
        expect "# "
        send "cat file.txt\r"
        expect {
            "File not found" {
                send "echo File not found\r"
                expect "# "
            }
            -re "hello\\s+world" {
                send "echo Matched\r"
                expect "# "
            }
        }
        send "exit\r"
    }
}
expect eof

你可能感兴趣的:(笔记,运维)