Linux学习之expect操作详解

这篇具有很好参考价值的文章主要介绍了Linux学习之expect操作详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、expect安装介绍

1.expect命令安装

安装语句:yum install expect

2.expect命令含义

expect是一种脚本语言,它能够代替人工实现与终端的交互,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。

3.expect使用场景

(1)并根据预定标准回答其问题,回答“是”、“否”或将控制权交还给您

(2)远程连接设备并执行自动化操作

(3)主要是一些需要人机交互的地方,如果提前知道应该输入什么指令都可以使用expect 工具

二、expect使用原理

1.原理介绍:

spawn启动指定进程—expect获取指定关键字—send向指定程序发送指定字符—执行完成退出

2、spawn命令介绍:

spawm命令就是用来启动新的进程的。spawn后的send和expect命令都是和spawn打开的进程进行交互的、

3、send命令介绍:

send命令接收一个字符串参数,并将该参数发送到进程,这个过程类似模拟人类输入密码

4、interact命令介绍:

结合spawn、expect、send自动化的完成很多任务,interact命令可以在适当的时候进行任务的干预,比如下载完ftp文件时,仍然可以停留在ftp命令行状态,以便手动的执行后续命令

三、expect使用语法

1. expect 启用选项:

  • -c 执行脚本前先执行的命令,可多次使用
  • -d debug模式,可以在运行时输出一些诊断信息,与在脚本开始处使用exp_internal 1相似。
  • -D 启用交换调式器,可设一整数参数。
  • -f 从文件读取命令,仅用于使用#!时。如果文件名为"-",则从stdin读取(使用"./-"从文件名为-的文件读取)。
  • -i 交互式输入命令,使用"exit"或"EOF"退出输入状态
  • -- 标示选项结束(如果你需要传递与expect选项相似的参数给脚本时),可放到#!行:#!/usr/bin/expect --
  • -v 显示expect版本信息

2.expect命令参数:

  • spawn 交互程序开始,执行后面的命令或程序。需要进入到expect环境才可以执行,不能直接在shell环境下直接执行
  • set timeout n 设置超时时间,表示该脚本代码需在n秒钟内完成,如果超过,则退出。用来防止ssh远程主机网络不可达时卡住及在远程主机执行命令宕住。如果设置为-1表示不会超时
  • set 定义变量
  • $argv expect脚本可以接受bash的外部传参,可以使用[ lindex $argv n ]n为0表示第一个传参,为1表示第二个传参,以此类推
  • expect 从交互程序进程中指定接收信息, 如果匹配成功, 就执行send的指令交互;否则等待timeout秒后自动退出expect语句
  • send 如果匹配到expect接受到的信息,就将send中的指令交互传递,执行交互动作。结尾处加上\r表示如果出现异常等待的状态可以进行核查
  • exp_continue 表示循环式匹配,通常匹配之后都会退出语句,但如果有exp_continue则可以不断循环匹配,输入多条命令,简化写法。
  • exit 退出expect脚本
  • expect eof spawn进程结束后会向expect发送eof,接收到eof代表该进程结束
  • interact 执行完代码后保持交互状态,将控制权交给用户。没有该命令执行完后自动退出而不是留在远程终端上
  • puts 输出变量

四、expect使用举例

1.expect脚本实现ssh自动登录远程服务器

1

2

3

4

5

6

7

#!/usr/bin/expect

spawn ssh mrswhite@192.168.37.9

expect "*password:"

send "test20221007\r"

expect "*#"

interact

expect expect_demo1.sh 执行查看运行结果:

linux expect,linux,学习,服务器

2.expect脚本实现ssh自动登录远程服务器(通用脚本,手动输入参数)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#!/usr/bin/expect

if {$argc < 3} {

    puts "Usage:cmd <host> <username> <password>"

    exit 1

}

set timeout -1

set host [ lindex $argv 0 ]

set username [ lindex $argv 1 ]

set password [ lindex $argv 2 ]

spawn ssh  $username@$host

expect "*password*" {send "$password\r"}

interact

./expect_demo2.sh 192.168.37.9 mrswhite  test20221007  执行查看运行结果:

linux expect,linux,学习,服务器

3.在shell 中嵌套expect

通过expect嵌套shell使用语句在shell内直接执行,任何这样可以实现更多的功能

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#!/bin/bash

user="mrswhite"

host="192.168.37.9"

password="test20221007"

/usr/bin/expect << EOF

set time 20

spawn ssh $user@$host

expect {

"*yes/no" { send "yes\r"; exp_continue }

"*password:" { send "$password\r" }

}

expect "*#"

send "pwd\r"

expect "*#"

send "df -h\r"

expect "*#"

send "exit\r"

interact

expect eof

EOF

linux expect,linux,学习,服务器

五、expect相关错误处理

1.invalid command name "/usr/bin/expect"

linux expect,linux,学习,服务器

解决方案:此时是使用bash脚本嵌套了expect代码,所以执行采用以下两种方式都可以

1

2

./expect_demo3.sh

sh expect_demo3.sh

linux expect,linux,学习,服务器

2.invalid command name ":" 转义问题

linux expect,linux,学习,服务器

 解决方案:send里面的内容中的括号[]有问题,不能使用[],将其去除或者添加转义字符

1

2

send "cat 20221007.txt | awk -F : '{print $2}'"

send "cat 20221007.txt | awk -F \[:\] '{print $2}'\r"

linux expect,linux,学习,服务器文章来源地址https://www.toymoban.com/news/detail-790127.html

到了这里,关于Linux学习之expect操作详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】命令expect使用详解

    🦄 个人主页 ——🎐 个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油! 🪁🍁🪁🍁🪁🍁🪁🍁 目录 一、概述 1.1 命令简介 1.2 使用场景 1.3 expect命令安装 二、expect使用原理 2.1 命令原理介绍 三、expect使用语法 3.1 expect 启用选项 3.2 .ex

    2024年02月05日
    浏览(43)
  • Linux操作系统配置代理服务器

    PS:本文只是针对Linux操作系统对于代理服务器的配置操作,不涉及广告        代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,须

    2024年02月13日
    浏览(67)
  • Linux 操作系统安装 Apache 服务器

    摘要 电子计算机诞生以来,计算机操作系统的研究有了很大的发展。我们 身边最熟悉的操作系统有微软的 windows。当然这只是相对于 pc 端来说。现在 操作系统进入了社会生活的各个方面,涉及大型计算机、个人计算机、移动便携 设备、其他自动化设备等各个层次的应用领域

    2024年02月04日
    浏览(66)
  • 【Linux学习笔记】Linux服务器:配置与管理samba服务器

    一、【linux学习笔记】红帽Linux 7.8系统在虚拟机上的安装 二、【Linux学习笔记】Linux系统的基本操作  三、【Linux学习笔记】管理Linux操作系统:用户管理  四、【Linux学习笔记】管理Linux操作系统:磁盘管理 五、【Linux学习笔记】管理Linux操作系统:软件安装  六、 【Linux学习

    2024年02月02日
    浏览(49)
  • Linux - 进阶 NFS服务器 详解网络共享服务器 ( 预备知识)

               N  :  就是 网络 Network          F   :     就是  File  文件         S   :  system          简称为 网络文件系统                 官方   :               NFS 是一种古老的用于UNIX/LINUX主机之间进行文件共享的协议              Network  File  System 网

    2024年02月13日
    浏览(55)
  • 使用串口重定向为服务器安装linux操作系统

    在不借助显卡,通过串口来完成安装过程中的配置等选项。总结整个流程如下,方法很简单。在信创x86的设备上所使用的是redhat 7.4以及kylinOS的操作系统,串口工具是secureCRT。 首先进入Bios将串口重定向打开,并选择boot management,进入安装盘的启动界面 然后在启动界面的第一

    2023年04月09日
    浏览(52)
  • 【Linux】NTP时间服务器Chrony配置详解

    🦄 个人主页——🎐开着拖拉机回家_大数据运维-CSDN博客 🎐✨🍁 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁🍁🪁🍁🪁 🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天

    2024年02月08日
    浏览(41)
  • Linux服务器配置指南:网络、用户管理、共享服务及DNS配置详解

    💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】 🤟 基于Web端打造的:👉轻量化工具创作平台 💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 设置虚拟机的网卡为仅主机模式,并要求服务器采用双网卡, ens33 IP地址设置为192.168. 5.x/24(其中x学号),

    2024年02月05日
    浏览(58)
  • linux 服务器执行post请求 curl命令详解

    curl是一个命令行访问URL的计算机逻辑语言的工具,发出网络请求,然后得到数据并提取出,显示在标准输出“stdout”上面,可以用它来构造http request报文,curl(CommandLine Uniform Resource Locator),即在命令行中利用URL进行数据或者文件传输。 基本语法: curl [option] [url] 实际用法 PO

    2024年02月02日
    浏览(45)
  • Windows的黑窗口(cmd)连接操作Linux服务器 SSH

    ssh -V 出现以上内容说明已经安装了ssh。 ssh root@10.154.63.234 这样就连接成功了。 接下来就可以使用命令操作服务器。

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包