Expect解决shell脚本的交互需求

在linux系统中,shell脚本可以大大提高我们的工作效率。但遇到需要交互的场景时,shell脚本却无法解决。

简介

Expect语言是基于Tcl的。Tcl实际上是一个子程序库,这些子程序库可以嵌入到程序里从而提供语言服务。 最终的语言有点象一个典型的 Shell语言。里面有给变量赋值的set命令,控制程序执行的if,for,continue等命令,还能进行普通的数学和字符串操作。当然了,还可以 用exec来调用Unix程序。所有这些功能,Tcl都有。

综述

Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令:

1.spawn命令激活一个Unix程序来进行交互式的运行。

2.send命令向进程发送字符串。

3.expect命令等待进程的某些字符串。expect支持正规表达式并能同时等待多个字符串,并对每一个字符串执行不同的操作。expect还能理解一些特殊情况,如超时和遇到文件尾。

4.expect命令和Tcl的case命令的风格很相似。都是用一个字符串去匹配多个字符串。(只要有可能,新的命令总是和已有的Tcl命令相似,以使得该语言保持工具族的继承性)。

示例:

yum -y install expect tcl tclx tcl-devel

通过expect解决ssh交互的问题

#!/usr/bin/expect
set timeout 10                 #设置超时等待时间
spawn ssh root@192.168.50.122  #使用spawn 执行unix程序开始交互
expect {                       #交互内容
"yes/no" { send "yes\r";exp_continue  }   #"yes/no"关键字匹配,"exp_continue"表示如果没有匹配到该项,则跳过。
"password:" { send "666666\r" };         #"password:"关键字匹配
}
interact                       #停留在交互界面

使用expect进行批量公钥推送

touch /ssh-copy-id.expect

#!/usr/bin/expect
set timeout 10
spawn ssh-copy-id ${ip}
expect {
"yes/no" { send "yes\r";exp_continue  }
"password:" { send "666666\r" };
}
#!/bin/bash
>ip.txt ##清空记录文本
for i in {1..255}
	do
{
    ip=192.168.1.${i}
  	ping -c1 -W1 ${ip} &> /dev/null
    if [ ${?} -eq 0 ] ; then
    	echo "${ip}" | tee -a ip.txt
    	/usr/bin/expect /ssh-copy-id.expect
    fi
} &  ##后台执行
done
wait
echo "ping finish..."

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/6080

(0)
李逍遥的头像李逍遥
上一篇 2022年11月14日 下午9:08
下一篇 2022年11月15日 上午11:32

相关推荐

  • CentOS如何修改root用户登录时默认目录

    如何修改root用户默认目录,修改/root/.bash_profile文件,只要加一行cd 路径就可以。 修改其它用户的配置,这个文件应该是在/home/username/.bash_profile(username为登录用户名)。 如何修改用户主机名?

    2023年11月7日
    63300
  • Prometheus 监控进程

    prometheus 进程的监控 1. process exporter功能 2. 监控目标对主机进程的监控,chronyd sshd 等服务进程已经已定义脚本运行程序的运行状态监控。 process-compose的安装 监控所有进程 监控指定进程 docker 运行 docker ps -a 确认 up http://10.19.1.220:9256/m…

    2024年1月4日
    65000
  • 查看调整cpu频率及模式

    使用cpufrequtils查看调整cpu频率及模式 cpufrequtils是一个查看和修改CPU频率GHz的工具有些物理服务器使用默认频率进行运行,这时可以使用该工具进行就该CPU的核心频率 安装: 使用: cpufreq-info 查看当前cpu状态 参数: 参数 值 说明 -c CPU序号 查看所指定cpu状态 -f 查看cpu当前频率 -l 查看c…

    2023年11月3日
    67800
  • 幻兽帕鲁服务器一键部署保姆教程

    普通一键部署(使用一键部署脚本) Windows 服务器一键部署 Windows的一键部署需要借助 PowerShell 来完成。PowerShell是一种任务自动化和配置管理框架,它提供了一个命令行Shell和脚本语言,用于管理和控制Windows操作系统和相关应用程序。那么要如何找到 PowerShell ?方法如下: 方法 描述 使用开始菜单 点击Wi…

    2024年1月30日
    60500
  • nginx快速部署一个网站服务 + 多域名 + 多端口

    一、nginx虚拟主机,部署网站 都是在同一台服务器上部署 二、部署单域名/IP网站服务 1、创建一个普通用户,用户管理nginx网站服务 2、修改nginx主配置文件 3、创建虚拟主机nignx子配置文件 只需要写server{}标签即可。 上面配置文件中配置了index.html的地址,这里可以看到是没有的,我们创建一下; 4、测试nginx配置文件语法…

    2023年12月25日
    78000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信