加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_沈阳站长网 (https://www.024zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux 中用 expect 自动执行 MySQL 语句

发布时间:2022-10-08 12:47:54 所属栏目:Linux 来源:
导读:  问答频道看到一个关于 expect 命令操作 MySQL 的问题,这个命令没见过,花了半个小时研究了一下,发现这个工具还是挺好用的。

  本文整理一下解答该问题的过程,顺便练习一下 Shell 编程。

  安装 e
  问答频道看到一个关于 expect 命令操作 MySQL 的问题,这个命令没见过,花了半个小时研究了一下,发现这个工具还是挺好用的。
 
  本文整理一下解答该问题的过程,顺便练习一下 Shell 编程。
 
  安装 expect
 
  测试这个脚本,执行到了 /usr/bin/expect 这一行时报文件不存在错误,一搜才知道 expect 是一个命令,需要安装,安装命令为:
 
  yum install expect
 
  自动登录 MySQL
 
  这个脚本的目的是使用 expect 命令自动登录 MySQL 并循环登录 N 次,完成插入 N 条数据。
 
  需要解决的几个问题是:
 
  每一轮登录 MySQL 并执行完成 insert 后需要退出命令循环累加操作必须放在 expect 的 EOF 外部send 发送参数时需要空格Shell 条件语句要用中括号,且首尾处必须要有空格
 
  创建测试库和表:
 
  create database testserver;
  use testserver;
  create table testnum( id varchar(50) ,number int);
  完整脚本
 
  #!/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
  这样,就得到一个通过 expect 自动完成 MySQL 数据库交互的脚本。
 
  自动执行MySQL脚本结果
 
  自动完成与数据库命令的交互操作并批量入库 N 条记录。
 
  启示录
 
  搜索了一下 expect 命令,有不少用它来登录 MySQL 的文章,这么看来它至少可以完成两个自动化功能:
 
  如果需要经常访问 Linux 上的 MySQL 数据库,可以写一个 MySQL 自动登录脚本完成数据库的批量操作
 
  如果直接在文件中注明使用 expect 脚本的话,那么就只能通过 spawn 来执行其他命令linux语句,否则会报命名不存在,例如:
 
  #!/usr/bin/expect -f
  spawn service mongod restart
  su elastic
  后面一句 su 命令是无法执行成功的,会报命令不存在错误,而且对于指定了 bin 脚本的文件,只能通过 ./文件名的方式来执行,而不能再用 sh xx.sh 的执行了,因为 sh 固定会找 /usr/bin/bash 文件来执行,就不能使用 expect 的命令了。
 

(编辑:我爱制作网_沈阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!