千家信息网

Shell编程之Expect免交互语句详解

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,Expect概述Expect是建立在tcl基础上的一个工具,Expect 是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。对于大规模的linux运维很有帮助。在linux运维
千家信息网最后更新 2024年11月26日Shell编程之Expect免交互语句详解

Expect概述

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

Expect安装

yum install expect -y

基本命令

send:

向进程发送字符串,用于模拟用户的输入。该命令不能自动回车换行,一般要加\r (回车)

expect:

expect的一个内部命令,判断上次输出结果里是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回。只能捕捉由spawn启动的进程的输出。

spawn:

启动进程,并跟踪后续交互信息。

interact:

执行完成后保持交互状态,把控制权交给控制台。

Timeout:

指定超时时间,过期则继续执行后续指令;
单位是:秒;
timeout -1为永不超时;
默认情况下,timeout是10秒。

exp_ continue:

允许expect继续向下执行指令

send_ user:

回显命令,相当于echo

$argv参数数组:

Expect脚本可以接受从bash传递的参数,可以使用[lindex $argv n]获得,n从0开始,分别表示第一个第二个,第三个...参数。

expect eof:

Expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了,expect eof是在等待结束标志。由spawn启动的命令在结束时会产生一个eof标记,expect eof即在等待这个标记。

Expect语法

单一分支语句

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

多分支模式语法

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

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

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

只要匹配上了任何一个,执行项硬的send语句后退出该expect语句。

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

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

Expect执行方式

直接执行:

通过执行脚本直接免交互进行ssh登录

[root@localhost opt]# vim demo01.sh #!/usr/bin/expect                                         //Expect二进制文件的路径set timeout 20                                            //超时时间20,单位:秒log_file test.log                                         //日志文件log_user 1                                                //日志用户个数set hostname [lindex $argv 0]set password [lindex $argv 1]              //定义变量,通过参数将内容传入,类似于位置变量spawn ssh root@$hostname              //追踪命令expect {                "Connection refused" exit           //捕捉服务被拒绝信息,并执行exit退出免交互                "service not konwn" exit             //捕捉未知服务或连接地址错误的信息,并执行exit退出免交互        "(yes/no)"                                     //捕捉询问是否连接的的信息        {send "yes\r";exp_continue}     //输入"yes",回车,并继续进行匹配        "*password"                                //捕捉密码输入的信息        {send "$password\r"}                //通过变量输入密码,回车,不继续匹配。}interact                                               //保持交互状态,把控制权交给控制台

嵌入执行:

通过脚本创建用户,再免交互给用户设置密码。

[root@localhost opt]# vim demo02.sh#!/bin/bashuser=$1                                                                          //定义位置变量$1为userpassword=$2                                                                //定义位置变量$2为passworduseradd $user                                                              //添加用户/usr/bin/expect <<-EOF                                              //Expect开始标志,标准性输入,等同于stdinspawn passwd $userexpect {        "新的 密码:"        {send "$password\r";exp_continue}        "重新输入新的 密码:"        {send "$password\r"}}EOF                                                                           //Expect结束语句,EOF前后不能有空格
输入 信息 命令 脚本 语句 变量 密码 用户 控制 参数 位置 时间 进程 服务 登录 分支 单位 字符 字符串 工具 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 国开数据库运维概述自测 十八大以来网络安全宣传 网络安全问题会带来哪些影响 腾讯云远程服务器如何重启 安卓开发的app软件开发 如何网络安全进校 杭州app手机软件开发 汇编和软件开发有什么区别 盘州网络安全系统报价多少 高斯数据库表被锁了怎么解锁 滨湖区创新网络技术销售厂 游戏引擎是用什么软件开发的 天津软件开发三本院校有哪些 软件开发领域最新技术总结 河北智博网络技术有限公司 中国电信维护网络安全照片 武汉大学网络安全学院程媛 什么是wifi网络安全 支持db2的数据库建模 软件开发员工转正自我鉴定 网络安全工程师岗位标准 哪些动画适合做网络安全短片 vba遍历数据库查询结果 智能化网络技术服务产品 第二章数据库系统 科技互联网时代的思维革命 软件开发说明 新一代信息网络安全支持通信方式 中国网络安全的什么者 儿童网络安全英语作文
0