当前位置:   article > 正文

expect 应用之操作 MySQL_mysql expect

mysql expect

问答频道看到一个关于 expect 命令操作 MySQL 的问题,这个命令没见过,花了半个小时研究了一下,发现这个工具还是挺好用的。本文整理一下解答该问题的过程,顺便练习一下 Shell 编程。

安装 expect

测试这个脚本,执行到了 /usr/bin/expect 这一行时报文件不存在错误,一搜才知道 expect 是一个命令,需要安装,安装命令为:

yum install expect

自动登录 MySQL

这个脚本的目的是使用 expect 命令自动登录 MySQL 并循环登录 N 次,完成插入 N 条数据。

需要解决的几个问题是:

  1. 每一轮登录 MySQL 并执行完成 insert 后需要退出命令
  2. 循环累加操作必须放在 expect 的 EOF 外部
  3. send 发送参数时需要空格
  4. Shell 条件语句要用中括号,且首尾处必须要有空格

创建测试库和表:

create database testserver;
use testserver;
create table testnum( id varchar(50) ,number int);
  • 1
  • 2
  • 3

完整脚本

#!/bin/bash
number=100
while [ ${number} -lt 120 ]
 do
   echo "number is"$number
   /usr/bin/expect <<-EOF
  spawn mysql -h IP -P 3306 -u root -p123456
  expect "*>*"
  send "show databases;\r"
  expect "*>*"
  send "use testserver;\r"
  expect "*>*"
  send "show tables;\r"
  expect "*>*"
  send "INSERT INTO testnum values('${number}',123456);\r"
  expect "*>*"
  send "quit;\r"
EOF
let "number++"
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

这样,就得到一个通过 expect 自动完成 MySQL 数据库交互的脚本。
在这里插入图片描述
自动完成与数据库命令的交互操作并批量入库 N 条记录。

启示录

搜索了一下 expect 命令,有不少用它来登录 MySQL 的文章,这么看来它至少可以完成两个自动化功能:

  1. 如果需要经常访问 Linux 上的 MySQL 数据库,可以写一个 MySQL 自动登录脚本
  2. 完成数据库的批量操作

如果直接在文件中注明使用 expect 脚本的话,那么就只能通过 spawn 来执行其他命令,否则会报命名不存在,例如:


#!/usr/bin/expect -f
spawn service mongod restart
su elastic
  • 1
  • 2
  • 3
  • 4

后面一句 su 命令是无法执行成功的,会报命令不存中错误,而且对于指定了 bin 脚本的文件,只能通过 ./文件名 的方式来执行,而不能再用 sh xx.sh 的执行了,因为 sh 固定会找 /usr/bin/bash 文件来执行,就不能使用 expect 的命令了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/666009
推荐阅读
相关标签
  

闽ICP备14008679号