expect语法示例

#spawn 新建一个进程,这个进程的交互由expect控制
#expect 等待接受进程返回的字符串,直到超时时间,根据规则决定下一步操作
#send 发送字符串给expect控制的进程
#set 设定变量为某个值
#exp_continue 重新执行expect命令分支
#set timeout 30 设置超时时间为30秒,-1不超时,永远等待
#interact 执行完后保持交互状态,如果不加这一项,交互完成会自动退出
#expect eof 等待spawn进程结束后退出信号eof

1.expect实现简单的交互登陆,需要安装expect工具

[root@oldxu shell]# cat expect1.ex
#!/usr/bin/expect
spawn ssh root@172.16.1.7 expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "123\r" };
}
interact

2.expect定义变量实现交互方式

[root@oldxu shell]# cat expect2.ex
#!/usr/bin/expect
set ip 172.16.1.7
set user root
set password 123
set timeout 5 spawn ssh $user@$ip expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "$password\r" };
}
#交互方式
interact

3.expect进行参数传递,执行命令或其他操作

[root@oldxu shell]# cat expect3.ex
#!/usr/bin/expect
set ip [lindex $argv 0] #接收脚本的第一个位置参数
set user root
set password 123
set timeout 5 spawn ssh $user@$ip expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "$password\r" };
} #当出现#号符执行如下命令
expect "#"
send "useradd bgx\r"
send "pwd\r"
send "exit\r"
expect eof

4.批量获取在线主机,进行秘钥批量分发

[root@oldxu shell]# cat expect4.sh
#!/usr/bin/bash #1.清空下ip.txt文件
> ip.txt #2.获取存活主机的IP,并写入ip.txt文件中
for i in {7..8}
do
ip=172.16.1.$i
{
ping -c1 -W1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip" >> ip.txt
fi
}&
done
wait && echo "IP地址获取成功" #3.生成对应的密钥
if [ ! -f ~/.ssh/id_rsa ];then
ssh-keygen -P "" -f ~/.ssh/id_rsa
fi #4.批量分发密钥
while read line
do
/usr/bin/expect <<-EOF
set pass 123
set timeout 2
spawn ssh-copy-id $line -f
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "$pass\r" }
}
EOF
done<ip.txt

交互式脚本expect场景示例的更多相关文章

  1. [转帖]自动交互式脚本--expect

    自动交互式脚本--expect https://www.cnblogs.com/zhuiluoyu/p/4873869.html 我们经常会遇到一些需要与服务器程序打交道的场景,比如,从登陆某个服务器 ...

  2. 自动交互式脚本--expect

    我们经常会遇到一些需要与服务器程序打交道的场景,比如,从登陆某个服务器,然后进行某项工作.这很平常,但是如果把这个工作自动化进行,你就需要一个程序能自动做你要告诉机器的事情,这样,我们的expect就 ...

  3. linux自动化交互脚本expect详解set timeout 5是 意思是在expect语句中,5s后超时,不再作出选择。

    linux自动化交互脚本expect详解  更新时间:2020年10月21日 10:13:20   作者:lendsomething     这篇文章主要介绍了linux自动化交互脚本expect的相 ...

  4. C#调用Python脚本的简单示例

    C#调用Python脚本的简单示例 分类:Python (2311)  (0)  举报  收藏 IronPython是一种在 .NET及 Mono上的 Python实现,由微软的 Jim Huguni ...

  5. shell脚本分为三类:登录脚本、交互式脚本、非交互式脚本

    shell脚本分为三类:登录脚本.交互式脚本.非交互式脚本 一. 登录脚本类似于windows下的计算机设置中的登录脚本和账户设置下的登录脚本的合集(我是这么理解的哈). 其配置文件的关键词为pref ...

  6. expect实现交互式脚本

    #!/usr/bin/expect -f ##告诉解释器用expect来解释 set timeout 6 ##设置超时时间 ] ## 这个是传递给脚本的第一个参数,并把参数赋值给user ] ## 这 ...

  7. expect脚本语言用法示例

    #!/usr/bin/expect set hostname [lindex $argv 0] set username [lindex $argv 1] set passwd [lindex $ar ...

  8. 结合WebSocket编写WebGL综合场景示例

    在WebGL场景中导入多个Babylon骨骼模型,在局域网用WebSocket实现多用户交互控制. 首先是场景截图: 上图在场景中导入一个Babylon骨骼模型,使用asdw.空格.鼠标控制加速度移动 ...

  9. 交互式命令 expect

    shell尽管很强大.但是貌似无法完成交互式命令的操作,实例 ssh host 如果host而且该机没有加入信任.手动输入的时间需要password. 这样的情况下可以使用expect支持. 下面举个 ...

随机推荐

  1. nginx docker 命令: command not found

    1. ps: command not found 使用如下命令安装 apt-get update && apt-get -y install procps 2. vim: comman ...

  2. Checkout 显示 URL /../../.. 不存在

    Checkout 显示 URL /../../.. 不存在 Checkout 显示 URL /../../.. 不存在 如果库的路径是 svn库的路径为:/usr/local/svn/test/ 启动 ...

  3. 【oracle】去重

    基本去重: SELECT DISTINCT * FROM TABLE; 其他去重: 待添加

  4. windbg是如何搜索符号文件的?

    来个样例 我的符号目录设置是: 用我们在windows下调试必须用到的ntdll.dll模块来讲下windbg加载符号文件的过程.windbg加载符号文件时,会首先根据配置的符号目录信息,在本地符号目 ...

  5. plv8 centos install steps

    install deps yum -y update yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL- ...

  6. cf1199解题报告

    目录 cf1199解题报告 A B C D E F cf1199解题报告 发一波水题. A 模拟 #include <bits/stdc++.h> #define ll long long ...

  7. 【LG4397】[JLOI2014]聪明的燕姿

    [LG4397][JLOI2014]聪明的燕姿 题面 洛谷 题解 考虑到约数和函数\(\sigma = \prod (1+p_i+...+p_i^{r_i})\),直接爆搜把所有数搜出来即可. 爆搜过 ...

  8. 【luoguP1533】可怜的狗狗

    题目链接 发现区间按左端点排序后右端点也是单调的,所以扫一遍就行了,用权值线段树维护第\(k\)大 #include<algorithm> #include<iostream> ...

  9. 转载:tensorflow保存训练后的模型

    训练完一个模型后,为了以后重复使用,通常我们需要对模型的结果进行保存.如果用Tensorflow去实现神经网络,所要保存的就是神经网络中的各项权重值.建议可以使用Saver类保存和加载模型的结果. 1 ...

  10. 第10组 Beta版本演示

    一.小组信息 组长博客链接 组名:凹秃曼 组内成员 学号 组员 031702240 童景霖(组长) 031702225 叶泽林 031702246 陈鸿立 031702201 万本琳 03170222 ...