Expect--非交互式控制工具

1、一般需要安装才能用:yun install -y expect
2、是一种免费的非交互式工具 当执行有些命令还需我们输入写东西才能执行成功的就属于交互式,例如 yum install 不加-y 时,我们还要输入y才能安装,就属于交互式。
3、基本参数
(1)定义expect脚本执行的shell
#!/usr/bin/expect -----类似于#!/bin/bash
(2) set timeout 30 #设置超时时间30s
(3)spawn #spawn是执行expect之后后执行的内部命令开启一个会话 #功能:用来执行shell的交互命令
(4)expect 相当于捕捉 #功能:判断输出结果是否包含某项字符串(相当于捕捉返回的结果),没有则会断开,否则等待一段时间后返回,等待通过timeout设
(5)send #执行交互动作,将交互要执行的命令进行发送给交互指令,命令字符串结尾要加上“\r”,#—相当于回车
(6)interract #执行完后保持交互状态,需要等待手动退出交互状态,如果不加这一项,交互完成会自动退出
(7)expect eof #直接退出expect模式,想啥时退出就加到哪里
(8)exp_continue #继续执行接下来的操作
4、实例1(这种脚本里用table键缩进,不能用空格,且脚本的执行式为./脚本名 执行)
#!/usr/bin/expect
spawn ssh root@192.168.142.154 #spawn+要交互的命令,用expect实现非交互
expect { # 这里是捕捉相应位置,发送交互式时要输入的东西
“yes/no” { sed “yes/no\r”;exp_continue } #yes/no 就是捕捉的位置 yes为要输入的东西,\r 回车,这些在交互式操作是都要做,这里我们写好局可以非交互
“password:” { send “1\r”}; #exp_continue 后面还有操作就要加这个,没有了就用;结尾 像这里
}
interact #让你还处于交互状态
下面是 ssh 交互时的图片
在这里插入图片描述
在这里插入图片描述

这两个点对应捕捉的两个点,我们发送相应的 就能实现非交互。
5、实例2 expect 脚本中参量的应用 (set 参量名 参量值 的格式来设置)
#!/usr/bin/expect
set user root #通过set 设置脚本内变量 user 为变量名 root 为变量值
set pass 1
set ip [ lindex $argv 0 ] #这里设置位置变量 ip 为变量名 0 为第一个位置变量相当于$1 用来接收传来的第一个变量,1 相当于$2 以此类推,其它的固定搭配
set timeout 10
spawn ssh u s e r @ user@ user@ip #参数的调用和bash脚本一样
expect {
“yes/no” { sed “yes\r”;exp_continue } 这种用{}发送操作是只能写一个操作
“password:” { send “$pass\r”;exp_continue }
“#” { send “useradd test1\r” }; 下面的发送模式可以发送多个操作
}
interact

实例2 变形
#!/usr/bin/expect
set user root
set pass 1
set ip [ lindex $argv 0 ]
set timeout 10
spawn ssh u s e r @ user@ user@ip
expect {
“yes/no” { sed “yes\r”;exp_continue }
“password:” { send “$pass\r”; exp_continue }
“#” { send “useradd test1\r” };
} #这种方式的可以用于密码验证啥的
interact
expect “#” 捕捉到# 做下面一系列操作 ,这种方式用于非交互成功需要一系列操作
send “useradd test\r”
send “pwd\r”
send “exit\r”
expect eof
6、普通shell脚本如何用expect
#!/usr/bin/bash
pass=1
#判断expect命令是否安装
rpm -qa expect &> /dev/null
if [ $? -ne 0 ];then
yum install -y expect
fi

#判断主机下面是否生成秘钥,如果没有生成秘钥
if [ ! -f ~/.ssh/id_rsa ];then
ssh-keygen -P “” -f ~/.ssh/id_rsa
fi

#循环执行获取up状态的ip地址。
for i in {2…254}
do
{
ip=192.168.198.$i
ping -c1 $ip &> /dev/null
if [ ? − e q 0 ] ; t h e n e c h o " ? -eq 0 ];then echo " ?eq0];thenecho"ip" >> up_ip.txt
set timeout 10
/usr/bin/expect <<-EOF #shell脚本中调用expect命令
spawn ssh-copy-id KaTeX parse error: Can't use function '\r' in math mode at position 73: …no" { send "yes\̲r̲"; exp_continue…pass\r" };
}
expect eof
EOF
fi
} &
wait
done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值