shell编程expect免交互
admin
2023-02-25 02:20:07
0

今天小编就为大家带来shell编程中expect免交互的文章。小编觉得挺不错的,为此分享给大家做个参考。一起跟随小编过来看看吧。

一 : expect 概述

1.1 expect

  • expect是建立在tcl基础上的一个工具,expect是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。对于大规模的linux运维很有帮助
  • 在linux运维和开发中,我们经常需要远程登陆服务器进行操作,登陆的过程是一个交互的过程,可能会需要输入yes/no、password等信息。为了模拟这种输入,可以使用expect脚本

二 : expect 安装

2.1 挂载光盘

2.2 制作本地yum仓库

2.3 执行安装命令

  • yum install expect -y
  • 系统在默认情况下是没有安装expect软件,需要手动安装

三 : expect基本命令

3.1 spawn : 启动进程,并跟踪后续交互信息

3.2 expect

  • expect的一个内部命令,判断上次输出结果里是否包含指定的字符串,如果有则立即返回,否则就等待超过时间后返回。
  • 只能捕捉由spawn启动的进程的输出

3.3 send :向进程发送字符串,用于模拟用户的输入

  • 该命令不能自动回车换行,一般要加\r(回车)

3.4 interact : 执行完成后保持交互状态,把控制权交给控制台

3.5 Timeout :指定超时时间,过期则继续执行后续指令

  • 单位是:秒
  • timeout -1 为永不超时
  • 默认情况下,timeout是10s

3.6 exp_continue

  • 允许expect继续向下执行指令

3.7 send_user

  • 回显命令,相当于echo

备注:

  • 永不超时常用于网络不稳定时使用
  • shell脚本中的continue 指结束这次循环,开始下一次循环
  • expect脚本中exp_continue指不会结束,继续匹配下一行

3.8  $argv 参数数组

  • expect 脚本可以接受从bash传递的参数,可以使用[lindex $argv n]格式,去进行获得,n从0开始,分别表示第一个,第二个,第三个……参数
  • v 代表value 值,前面是固定格式
  • agv 与n 中间要有空格

3.9 expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就足够了

  • expect eof 是在等待结束标志。由spawn启动的命令在结束时会产生一个eof标记,expect eof即在等待这个标记
  • 看到eof 即代表结束脚本

四 : expect 语法

shell编程expect免交互

  • expect “要捕捉的内容” {send "要输入的参数\r";}

  • \r   回车符

  • 没有带有exp_continue ,则匹配一次就推出,有的话就再往下执行匹配一次
  • -re 参数表示匹配正则表达式

五 : experct 执行方式

5.1 直接执行

[root@localhost ~]# vim a.sh
#!usr/bin/ecpect    //expect二进制文件的路径,
#设置环境
#超时时间
set timeout 9       //设置超时时间
log_file test.log   //日志文件路径
log_user 1          //用户数量为1
#定义变量
set hostname [lindex $argv 0 ]
set password [lindex $argv 1 ]
#开启追踪spawn
spawn ssh root@$hostname    //spawn 启动命令
#匹配条件,捕捉
expect {        //按条件捕捉去send执行
     "(yes/no)"
     {send "yes\r";exp_continue}
     "*passwor"
     {send "$password\r"}
}
#权限转交控制台
interact
[root@localhost ~]# chmod +x a.sh 
[root@localhost ~]# ./a.sh  $argv0 $argv1
  • interact不要写在大括号里面

  • [gsy@localhost root]$ which expect
    /usr/bin/expect
  • 两个log可加可不加

  • set两个变量代表着传参

  • 然后以spawn 去开启服务

  • exprct 去捕捉条件,中间send输出指令,\r回车,exp_continue继续匹配

  • interact结束

5.2 嵌入执行

[root@localhost ~]# vim b.sh 
#!/bin/bash
   hostname=$1
   password=$2
   /usr/bin/expect<<-EOF    //expect开始EOF标志
   spawn ssh root@$hostname
   expect {
        "(yes/no)"
        {send "yes\r";exp_continue}
        "*password"
        {send "$password\r"}
   }
   expect "*]#"     //检索是否以root登陆
   send "exit\r"
   expect eof
EOF     //exprct结束标志,这个EOF不能有空格
[root@localhost ~]# source b.sh 
  • java的全局变量指的是类文件为区域

  • shell的是所有bash环境都能识别

  • /usr/bin/expect<<-EOF 也可以视为声明expect 位置

  • EOF前后不能有空格

spawn :以spawn模式执行操作,expect 才可以捕捉到

六 : expect 案例

6.1 创建用户tom,密码123123

  • 正常情况下的交互过程

shell编程expect免交互

  • 编写shell脚本(嵌入方式)
[root@localhost ~]# vim b.sh 
#!/bin/bash
user=$1
mima=$2
/usr/bin/expect<<-EOF
spawn useradd $user
spawn passwd $user
expect {
  "New password"
  {send "$mima\r";exp_continue}
  "new password"
  {send "$mima\r"}
}
expect eof
EOF
[root@localhost ~]# chmod +x b.sh 
[root@localhost ~]# ./b.sh qqq 965483
spawn useradd qqq
spawn passwd qqq
Changing password for user qqq.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@localhost ~]# vim b.sh
[root@localhost ~]# id qqq
uid=1001(qqq) gid=1001(qqq) groups=1001(qqq)

shell编程expect免交互

6.2 ssh登录

  • 首次登录

shell编程expect免交互

  • 正常登录

  • 连接被拒绝,可能是ssh没开,或者端口不对,或者防火墙限制

shell编程expect免交互

  • 没有连接地址

shell编程expect免交互

  • 利用expect完成ssh登录过程

shell编程expect免交互

6.3 利用expect完成ftp登录过程

shell编程expect免交互

shell编程expect免交互

想要注释多行语句  可以在首部输入 :<

以上就是shell编程expect免交互的方法介绍,详细使用情况还得要大家自己使用过才能知道具体要领。如果想了解更多相关内容,欢迎关注行业资讯频道!

相关内容

热门资讯

雷达、机库、营房、燃料库、飞机... 据《华盛顿邮报》5月6日报道,通过卫星影像分析发现,自2月28日战事爆发以来,伊朗空袭已在中东美军军...
从买买买到租租租,“租用一代”... “五一”假期还在路上,年轻人已经“租”起来了。 “租三天,不到300块钱。”五一放假前一周,清清已给...
【品牌】摩托罗拉大折叠屏新机定... 此前联想预热将于5月19日19点举行联想天禧AI一体多端全场景新品超能之夜活动,届时将带来多款新品,...
常州欣隽益取得接线端子用快速冲... 国家知识产权局信息显示,常州欣隽益科技有限公司取得一项名为“接线端子用快速冲切装置”的专利,授权公告...
美媒:特朗普在结束伊朗战争问题... 据“国会山”网站5月6日报道,周二晚间,美国总统特朗普突然宣布终止旨在打破伊朗对霍尔木兹海峡掌控的军...
和创硅材料取得熔融石英制品擦洗... 国家知识产权局信息显示,东海县和创硅材料有限公司取得一项名为“一种熔融石英制品的擦洗脱泥装置”的专利...
美商务部长再就爱泼斯坦案接受国... 5月6日,美国商务部长卢特尼克“自愿”就其与爱泼斯坦的关系接受美国国会众议院监督与政府改革委员会的问...
“五一”小长假黄金零售市场新变... 【大河财立方 记者 孙凯杰】 “五一”小长假,黄金价格出现一波短暂调整,线下黄金零售市场热度如何?5...
以军3周来首次袭击黎巴嫩首都 据以色列总理内塔尼亚胡和国防部长卡茨当地时间5月6日晚发表的联合声明,以军当天对黎巴嫩首都贝鲁特南郊...
东莞移动:5G-A智擎护航, ... “五一”期间,松山湖草莓音乐节、广东国际汽车展示交易会·春季、2026茶园游会田园文化美食节、大岭山...