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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 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 的应用场景非常丰富,掌握了这个工具,你将能够大大提升你的工作效率。希望这篇文章能对你有所帮助!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
10 2
|
6天前
|
运维 Devops jenkins
自动化运维之路:从脚本到DevOps
【9月更文挑战第31天】在数字化时代的浪潮中,运维不再是单纯的系统维护,而是企业竞争力的加速器。本文将带你领略自动化运维的演变历程,从最初的脚本编写到现代DevOps实践的转变,揭示如何通过持续集成和持续交付(CI/CD)实现运维的高效与创新。我们将一起探索工具的选择、流程的优化以及文化的培养,让运维工作变得既简单又强大。
|
8天前
|
机器学习/深度学习 人工智能 运维
自动化运维的魔法:如何利用Python脚本提升工作效率
【9月更文挑战第29天】在数字时代的浪潮中,IT运维人员面临着前所未有的挑战和机遇。本文将通过深入浅出的方式,介绍自动化运维的基本概念、核心价值以及使用Python脚本实现自动化任务的方法。我们将从实际案例出发,探讨如何利用Python简化日常的系统管理任务,提高运维效率,并展望自动化运维的未来趋势。无论你是初学者还是有经验的运维专家,这篇文章都将为你开启一扇通往高效工作方式的大门。
12 2
|
10天前
|
运维 Ubuntu 应用服务中间件
自动化运维:使用Ansible进行配置管理和任务自动化
【9月更文挑战第27天】在现代IT基础设施中,自动化运维是提高效率、减少人为错误和确保系统一致性的关键。本文将介绍如何使用Ansible,一个流行的开源IT自动化工具,来简化日常的运维任务。我们将探索Ansible的核心概念,包括它的架构、如何安装和使用它,以及一些实际的使用案例。无论你是新手还是有经验的运维专家,这篇文章都会提供有价值的见解和技巧,以帮助你更好地利用Ansible实现自动化。
|
8天前
|
运维 监控 jenkins
自动化运维之路:从脚本到工具的演变
【9月更文挑战第29天】在数字化浪潮中,运维不再是简单的服务器管理。本文将带您穿越自动化运维的发展历程,揭示如何通过技术革新提升效率与可靠性。我们将探索自动化工具如何解放双手,实现快速部署、监控和故障恢复,最终达到高效运维的目标。
|
9天前
|
运维 监控 关系型数据库
自动化运维:编写基本的自动化脚本
自动化运维:编写基本的自动化脚本
9 1
|
12天前
|
Web App开发 存储 安全
Python编写脚本,打开浏览器输入网址,自动化登陆网站
Python编写脚本,打开浏览器输入网址,自动化登陆网站
15 4
|
1月前
|
运维 Ubuntu Devops
自动化运维工具的魅力:Ansible入门
【9月更文挑战第5天】在快速变化的IT世界里,自动化运维不再是可选项,而是必需品。Ansible,一款简单却强大的自动化工具,正成为众多DevOps工程师的首选。本文将带你了解Ansible的基本概念、安装步骤以及如何编写简单的Playbook,从而开启你的自动化之旅。
70 36
|
8天前
|
机器学习/深度学习 运维 Cloud Native
构建高效运维体系:从自动化到智能化的演进之路
在当今数字化时代,运维作为信息技术的重要支柱,其效率与创新能力直接关系到企业信息系统的稳定性和业务连续性。本文将探讨如何通过技术手段,实现运维从传统手工操作向自动化、智能化的转变,进而构建一个高效、可靠的运维体系。我们将从自动化工具的应用开始,逐步深入到智能运维的实践,最终展望云原生架构下的运维未来趋势。
|
12天前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进之路
在当今数字化时代,运维作为保障企业IT系统稳定运行的关键环节,正经历着前所未有的变革。本文将探讨如何通过实施自动化和引入智能化技术,构建一个更加高效、可靠的运维体系,以应对日益复杂的业务需求和技术挑战。
25 1
下一篇
无影云桌面