expect自动交互脚本:简化你的自动化任务

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: `expect` 是Linux自动化神器,用于模拟键盘输入与交互式应用自动交互,常用于自动登录服务器、执行命令。安装 `expect`(CentOS: `yum -y install tcl expect`, Ubuntu: `apt-get -y install expect`) 后,编写脚本如SSH登录示例,自动发送密码和命令。通过结合shell命令,`expect` 可实现复杂任务,如获取IP、登录MySQL。支持多服务器管理,根据用户输入选择登录。学习 `expect` 提升自动化效率!

在日常的 Linux 系统管理和自动化任务处理中,经常会遇到需要自动登录到服务器并执行一系列命令的情况,例如批量部署更新、监控日志等。手动操作不仅耗时耗力,而且效率低下,特别是当涉及到多台服务器时。

expect 工具就是为了解决这类问题而生。它可以模拟键盘输入,自动化控制交互式应用程序的执行流程。

本文将从初学者的角度出发,介绍如何使用 expect 来简化日常的自动化任务。

安装 expect

在开始之前,首先需要确保你的系统中已安装 expect。安装 expect 的步骤非常简单:

CentOS 系统

# 安装依赖包
yum -y install tcl

# 安装 expect
yum -y install expect

Ubuntu 系统

apt-get -y install expect

自动登录服务器并执行脚本

基础示例

以自动登录服务器并部罀项目的脚本为例,我们来看如何使用 expect

#!/usr/bin/expect -f

set user root # 这里填写账户名称
set host 127.0.0.1 # 这里填写服务器 IP 地址
set password 123456 # 这里填写密码
set timeout -1 # 设置超时时间永不超时,默认为 10 秒

# 启动 ssh 命令
spawn ssh $user@$host
expect "password:*"
send "$password\r"

# 执行目标命令
expect "#"
send "cd /data/portal_api_dfo_hyperf\r"
expect "#"
send "./deploy.sh\r"
expect "#"

# 读取到文件结束符,表示 expect 执行结束
expect eof
# 进入交互模式,用户将停留在远程服务器上
interact

这段脚本简洁直观地展示了如何自动登录服务器并执行简单命令。

获取 IP 地址

expect 也可以配合其他命令使用,例如获取服务器的 IP 地址:

set idcid [exec sh -c {
   ifconfig eth0 | grep Mask | cut -d: -f2 | awk '{print $1}'}]

通过执行 shell 命令,我们可以把命令的输出赋值给 expect 脚本中的变量。

进阶示例

进一步地,我们可以编写一个更复杂的 expect 脚本来实现自动连接服务器并进入 MySQL 数据库:

#!/usr/bin/expect -f
set timeout -1
spawn ssh root@127.0.0.1
expect -re "password" {
    send "userpwd123\r" }
expect -re ":~#" {
    send "mysql -uroot -p123456\r" }
expect -re "mysql>" {
    send "show databases;\r" }
expect -re "mysql>" {
    exit }
expect eof

测试一些其他的参数


#!/usr/bin/expect -f

set user root
set host 127.0.0.1
set password 123456
set timeout -1

spawn ssh $user@$host
expect "password:*"
send "$password\r"

send_user "Now! we will deploy the project of portal_api_dfo_hyperf\r"  # 打印信息,类似 echo

set tt [exec sh -c {
   echo 1212123}]  #   执行 shell 语句
puts "$tt"  # 打印信息,类似 echo

expect "#"
send "cd /data/portal_api_dfo_hyperf\r"
expect "#"
send "./deploy.sh\r"
expect "Detected an available cache, skip the vendor scan process"

sleep 10  # 脚本进入睡眠
send "\003" # 如果想向远端发送 Ctrl-C 结束远端进程
exit  # 退出

#interact
expect eof

支持登录多台服务器的脚本

在管理多台服务器时,可以通过编写一个脚本来选择性登录不同的服务器:

#!/bin/bash

echo "1. 阿里云"
echo "2. 百度云"
echo -n "选择要登录的服务器: "

read choose

case $choose in
1)
    expect -c '
  set timeout -1
  spawn ssh root@服务器IP地址
  expect {
          "yes/no"  {send "yes\r"; exp_continue}
          "*assword"  {send "服务器密码\r"}
      }
  interact
  expect eof
  '
    ;;
esac

这段脚本使用了 bash 和 expect 的混合编程,使得根据用户输入,自动选择并登录到不同的服务器。

总结

expect 是一个非常强大的自动化工具,可以模拟用户的键盘输入操作,帮助我们自动化执行各种交互式命令。通过本文的介绍,你应该已经对如何使用 expect 有了基本的了解。

实际上,expect 的应用场景非常丰富,掌握了这个工具,你将能够大大提升你的工作效率。希望这篇文章能对你有所帮助!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
1月前
|
人工智能 数据可视化 数据挖掘
团队日报不用愁!自动化生成工具亲测:任务进度实时同步
本文深入分析了传统手动日报在数据孤岛、格式混乱和时效性差三大痛点,并探讨了自动化日报带来的效率提升、决策优化等四大核心价值。通过对板栗看板、SmartBrief、n8n 等六款主流工具的功能、适用场景及实战效果进行测评,为企业提供科学的选型建议与实施路径。
团队日报不用愁!自动化生成工具亲测:任务进度实时同步
|
1月前
|
传感器 人工智能 JavaScript
Playwright实战:写UI自动化脚本,速度直接起飞
简介: 测试工程师老王因UI自动化问题深夜奋战,反映出传统测试工具的局限性。微软开源的Playwright凭借智能等待、跨域操作、移动端模拟与网络拦截等强大功能,正迅速取代Selenium,成为新一代自动化测试标准。其稳定高效的设计显著降低维护成本,助力企业构建高质量测试流程。
|
3月前
|
机器学习/深度学习 Kubernetes 监控
Kubernetes 节点故障自愈方案:结合 Node Problem Detector 与自动化脚本
本文深入探讨了Kubernetes节点故障自愈方案,结合Node Problem Detector(NPD)与自动化脚本,提供技术细节、完整代码示例及实战验证。文章分析了硬件、系统和内核层面的典型故障场景,指出现有监控体系的局限性,并提出基于NPD的实时事件捕获与自动化诊断树的改进方案。通过深度集成NPD、设计自动化修复引擎以及展示内核死锁恢复的实战案例,文章详细说明了自愈流程的实现步骤与性能优势。此外,还提供了生产环境部署指南、高可用架构设计及安全防护措施,并展望了机器学习增强故障预测和混沌工程验证的进阶优化方向。全文约1.2万字,适合希望提升Kubernetes集群稳定性的技术人员阅读。
139 1
|
6月前
|
存储 人工智能 API
OWL:告别繁琐任务!开源多智能体系统实现自动化协作,效率提升10倍
OWL 是基于 CAMEL-AI 框架开发的多智能体协作系统,通过智能体之间的动态交互实现高效的任务自动化,支持角色分配、任务分解和记忆功能,适用于代码生成、文档撰写、数据分析等多种场景。
1483 13
OWL:告别繁琐任务!开源多智能体系统实现自动化协作,效率提升10倍
|
8月前
|
人工智能 自然语言处理 API
UI-TARS:字节跳动开源专注于多平台 GUI 自动化交互的视觉语言模型
UI-TARS 是字节跳动推出的新一代原生图形用户界面(GUI)代理模型,支持跨平台自动化交互,具备强大的感知、推理、行动和记忆能力,能够通过自然语言指令完成复杂任务。
2309 16
UI-TARS:字节跳动开源专注于多平台 GUI 自动化交互的视觉语言模型
|
6月前
|
关系型数据库 Shell 网络安全
定期备份数据库:基于 Shell 脚本的自动化方案
本篇文章分享一个简单的 Shell 脚本,用于定期备份 MySQL 数据库,并自动将备份传输到远程服务器,帮助防止数据丢失。
|
8月前
|
Web App开发 人工智能 JSON
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
AutoMouser是一款Chrome扩展程序,能够实时跟踪用户交互行为,并基于OpenAI的GPT模型自动生成Selenium测试代码,简化自动化测试流程。
530 17
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
|
8月前
|
存储 安全 数据可视化
用Python实现简单的任务自动化
本文介绍如何使用Python实现任务自动化,提高效率和准确性。通过三个实用案例展示:1. 使用`smtplib`和`schedule`库自动发送邮件提醒;2. 利用`shutil`和`os`库自动备份文件;3. 借助`requests`库自动下载网页内容。每个案例包含详细代码和解释,并附带注意事项。掌握这些技能有助于个人和企业优化流程、节约成本。
312 3
|
8月前
|
Web App开发 数据采集 JavaScript
Chrome浏览器实例的TypeScript自动化脚本
Chrome浏览器实例的TypeScript自动化脚本
|
13天前
|
运维 Linux 网络安全
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
45 4