网站首页 > 精选文章 正文
背景
问答频道看到一个关于 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 数据库交互的脚本。
自动完成与数据库命令的交互操作并批量入库 N 条记录。
启示录
搜索了一下 expect 命令,有不少用它来登录 MySQL 的文章,这么看来它至少可以完成两个自动化功能:
- 如果需要经常访问 Linux 上的 MySQL 数据库,可以写一个 MySQL 自动登录脚本
- 完成数据库的批量操作
如果直接在文件中注明使用 expect 脚本的话,那么就只能通过 spawn 来执行其他命令,否则会报命名不存在,例如:
#!/usr/bin/expect -f
spawn service mongod restart
su elastic
后面一句 su 命令是无法执行成功的,会报命令不存在错误,而且对于指定了 bin 脚本的文件,只能通过 ./文件名的方式来执行,而不能再用 sh xx.sh 的执行了,因为 sh 固定会找 /usr/bin/bash 文件来执行,就不能使用 expect 的命令了。
- 上一篇: 七日杀上帝模式指令与作弊代码大全
- 下一篇: 我的世界死亡不掉落指令解答
猜你喜欢
- 2025-01-09 我的世界联机服务器类指令大全
- 2025-01-09 方舟:异特龙驯养方法及介绍|方舟异特龙代码
- 2025-01-09 我的世界0.10.0作弊码介绍 minecraft作弊码分享
- 2025-01-09 我的世界死亡不掉落指令解答
- 2025-01-09 七日杀上帝模式指令与作弊代码大全
- 2025-01-09 《我的世界:移动版》作弊码有什么 作弊码分享
- 2025-01-09 我的世界ess指令作用详解
- 2025-01-09 内网横向移动—NTLM-Relay重放,Responder中继攻击,Ldap,Ews
- 2025-01-09 我的世界服务器常用指令大全
- 2025-01-09 我的世界指令代码初学入门指南
- 05-15OSPFv2和 OSPFv3 有哪些相同点和不同点?
- 05-15为什么IPv6不支持固定IP作为地址?
- 05-15网工必备:Ping命令的十个实用技巧
- 05-15单播以及多播的书写实验
- 05-15纯净安心+支持IPv6远程使用丨NAS部署Windows激活工具教程
- 05-15笔记09:IPv6地址配置方法三——DHCPv6有状态地址自动配置
- 05-15手把手教你DHCPv6实验
- 05-15小学生钓鱼网站渗透实战
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)