千家信息网

shell之Expect免交户详解

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,SHell编程之Expect免交互(1)Expect概述(1)Expect是建立在tcl基础上的一个工具,Expect是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。对于大规
千家信息网最后更新 2026年10月31日shell之Expect免交户详解

SHell编程之Expect免交互

(1)Expect概述

(1)Expect是建立在tcl基础上的一个工具,Expect是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。对于大规模的linux运维很有帮助。
(2)在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互到的过程,可能会需要输入yes/no password等信息。为了模拟这种输入,可以使用EXpect脚本。

(2)Expect安装

执行安装命令
yum install expect -y
1

(3)命令1

send:向进程发送字符串,用于模拟用户的输入
该命令不能自动回车换行,一般要加\r(回车)
ecpect
(1)expect的一个内部命令,判断上次输出结果里是否包含指定的字符串,如果有则立即返回,否则就等待超时间后返回。
(2)只能捕捉由spawn启动的进程的输出
spawn:启动进程,并跟踪后续交互信息
ingteract:执行完成后保持交互状态,把控制权交给控制台
常用的格式:
spawn 命令
spawn passwd zhangsan
expect "提示信息"
expect "输入密码"
send 替代人工输入的字符串 \r(回车)
send "abc123\r"
123456

(4)命令2

Timeout:指定超时时间,过期则继续执行后续指令
单位是:秒
timeout-1 为永不超时
默认情况下,timeout是10秒
exp_coutinue
允许expect继续向下执行指令
send_user
回显命令,相当于echo

(5)命令3

$argv参数数组
Expect脚本可以接受从bash'传递的参数,可以使用[lindex $argv n]获得,n从0开始,分别表示第一个、第二个、第三个…参数
Expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了
expect eof是在等待结束标志。由spawn启动的命令在结束时会产生一个eof标记,expect eof即在等待这个标记。

(6)Expect的语法和用法

单一分支语法

expect "password:" {send "mypassword\r";}

多分支模式语法

Send命令不具备回车换行功能,一般要加\r或\n

expect "aaa" {send "AAA\r";}expect "aaa" {send "AAA\r";}expect "aaa" {send "AAA\r";}123

只要匹配了aaa或bbb或ccc中的任意一个,执行相应的send语句后退出该expect语句

expect {"aaa" {send "AAA\r";}"bbb" {send "BBB\r";}"ccc" {send "CCC\r";}}12345

exp_continue 表示继续后边的匹配,如果匹配了aaa,执行完send语句后还要继续向下匹配bbb

expect {"aaa" {send "AAA";exp_continue}"bbb" {send "BBB";exp_continue}"ccc" {send "CCC";}}12345

Expect执行方式

(1)直接执行

[root@localhost ~]# vim de.sh#!/usr/bin/expect    //Expect开始标志 #超时时间  set timeout 60  log_file test.log  log_user 1#参数传入  set hostname [lindex $argv 0]  set passwd [lindex $argv 1]  #追踪命令  spawn ssh root@$hostname  #捕捉信息并且匹配,免交互执行  expect {        "(yes/no)"        {send "yes\r";exp_continue}        "*password"        {send "$passwd\r"}  } #控制权交给控制台执行 interact
[root@localhost ~]# chmod +x de.sh[root@localhost ~]# ./de.sh 192.168.217.132 12345612345678910111213141516171819202122

嵌入执行

[root@localhost ~]# vim sa.sh#!/bin/bash#位置变量hostname=$1password=$2/usr/bin/expect <<-EOFspawn ssh root@${hostname}expect {  "(yes/no)"  {send "yes\r";exp_continue}  "*password"  {send "$password\r"}}  expect "*]#"  send "exit\r"  expect eofEOF[root@localhost ~]# chmod +x sa.sh[root@localhost ~]# ./sa.sh 192.168.217.132 123456
命令 控制 输入 信息 参数 脚本 字符 字符串 语句 语法 进程 分支 工具 指令 控制台 控制权 时间 标志 标记 过程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡豆 科技信息互联网 深圳互联网科技公司 喔噻互联网科技 互联网科技英文 互联网女皇 腾讯科技 互联网科技汛 山东吉时兔互联网科技有限公司 互联网公司会议桌创意科技软装饰 新华互联网科技2019 赶超互联网科技 微信多开 特约风豹互联网科技为什么扣费 锡山区互联网智能科技产品供应 广州百诚互联网科技有限公司官网 张召忠谈中国互联网科技 世界互联网科技成果奖 艺电能源互联网科技有限公司招聘 科技和互联网行业的特点 科技互联网专业务虚会材料 高科技和互联网的现代国家 亿人帮互联网科技有限公司 科技互联网龙头 互联网科技开发公司 新华互联网科技校企合作 语蝶互联网科技有限公司 健康食品互联网创新科技园项目 恒生互联网科技业指数调整周期 福建互联网展示科技馆设计 普陀区互联网教育科技管理办法 科技互联网专业务虚会材料
0