Linux_expect命令简介

1.简介

expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。

2.expect自动交互流程

1)spawn启动指定进程
2)expect获取指定关键字
3)send向指定程序发送指定字符
4)执行完成退出

3.常用命令

命令描述
spawn交互程序开始后面跟命令或者指定程序
expect获取匹配信息匹配成功则执行expect后面的程序动作
send exp_send用于发送指定的字符串信息
exp_continue在expect中多次匹配就需要用到
send_user用来打印输出 相当于shell中的echo
exit退出expect脚本
eofexpect执行结束 退出
set定义变量
puts输出变量
set timeout设置超时时间

4.应用举例

一台机器向多个机器推送文件
脚本1:scp.sh实现推送过程

#!/usr/bin/expect/bin/expect -f  #此行根据expect安装路径更改
set ip [lindex $argv 0] #ip读取配置文件获取
set user root #设置被推送用户名
set passwd [lindex $argv 1] #实际生产中服务器密码是不一致的这里采取读配置文件来获取密码
set dir_1 /home/root/test/ #推送文件路径
set dir_2 /tmp/ #被推送服务器接收文件路径
set file_name test.txt #推送文件的名称
set timeout 100 #设置超时时间可根据实际情况修改

spawn scp $dir_1$file_name $user@$ip:$dir_2

expect {
	"yes/no" {send "yes\r";exp_continue}
	"password:" {send "$passwd\r"}
}
expect eof 
exit

脚本2:run.sh读取配置文件传参数

#!/bin/bash
for ((i=1;i<=$(cat host.ini|wc -l);i++)); #host.ini为配置被推送主机的ip和密码文件
do
us=$(cat host.ini | sed -n "$(i)"p | awk '{print $1}'); #获取配置文件IP信息
ps=$(cat host.ini | sed -n "$(i)"p | awk '{print $2}'); #获取配置文件密码
./scp.sh $us $ps
done

脚本3:host.ini配置被推送主机,第一列为主机ip,第二列为对应的密码,中间空格隔开

192.168.212.21 Abcd1234
192.168.212.22 gher9087
192.168.212.23 jjgt5632

5.总结

3个脚本和被推送文件需要在同级目录下执行,若不在同级目录更改脚本中路径即可,本例中主机配置文件host.ini是明文密码存在极大安全隐患。实际生产环境有更安全的工具(如:ansible)实现文件推送,本例仅为新手学习实践练手。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值