当前位置: 首页 > news >正文

Linux系统shell脚本(五)

一、Expect 脚本

xpect 是一个免费的编程工具语言,能实现自动和交互式任务通信,无需人工干预。它由 Don Libes 于 1990 年开始编写,可对需要从终端获取输入的命令或程序提供模拟输入,甚至能实现简单的 BBS 聊天机器人。

Shell 虽能实现循环、判断等简单控制流功能,但在交互场合需人工干预。而 Expect 可解决如 SSH、FTP 服务器免交互自动连接等问题,不过它需要 Tcl 编程语言的支持,运行前需先安装 Tcl。

[root@localhost ~]# yum install -y expect
#安装 expect
[root@localhost ~]# yum install -y tcl
#安装 tcl

通过 ssh 远程操控主机时,解决交互的方式有:

  1. 通过 ssh 的密钥对
  2. 通过 sshpass 工具提交密码
  3. 通过 expect 工具提交密码

二、安装 expect

[root@localhost ~]# yum install -y tcl
#安装tcl
[root@localhost ~]# yum install -y expect
#安装expect

三、如何使用 expect

expect 常规使用的工作流程为:spawn 启动指定进程→expect 获取期待的关键字→send 向指定进程发送响应内容→进程执行完成后,退出 expect 程序。下面介绍其关键部分:

三、如何使用 expect

expect 常规使用的工作流程为:spawn 启动指定进程→expect 获取期待的关键字→send 向指定进程发送响应内容→进程执行完成后,退出 expect 程序。下面介绍其关键部分:

3-1、spawn 命令

作用是启动新的产生交互的进程,语法为:

spawn [选项] [需要执行的shell命令或程序等]

例如修改已存在账户密码时,可使用spawn passwd tom启动 passwd 进程。

3-2、expect 命令

用于获取 spawn 执行命令或程序后产生的交互信息,判断是否匹配,匹配则执行相应动作,语法为:

expect [选项] 表达式 [动作]

选项如 “-re” 表示使用正则表达式匹配。

3-3、send 命令

在 expect 命令匹配指定字符后,向系统程序发送指定字符串,支持 n(回车)、r(换行)、t(制表符)等特殊转义符。

案例 :修改密码

#!/usr/bin/expect
spawn passwd tom
expect {
"*密码:" { send "123.com"; exp_continue }
"*新的密码:" { send "123.com" }
eof
}

案例:

3-4、exp_continue 命令

若需一次匹配多个字符串并执行不同动作,该命令可让 expect 程序继续匹配。

3-5、send_user 命令

用于打印 expect 脚本信息,类似 shell 里的 echo 命令,例如:

[root@localhost ~]# vim send_user.exp
#!/usr/bin/expect
#Filename: send_user.exp
send_user "beijingn"
send_user "shanghait"
send_user "guangzhoun"

3-6、expect 变量

  • 普通变量:定义语法为set 变量名 变量值,调取方式为puts $变量名send_user "$变量名"
  • 位置参数变量:通过set <变量名称> [lindex $argv <param index> ]接收,$argc表示传入参数个数,$argv0表示当前执行脚本的名称。

四、Shell 脚本调用 expect 的方法

在shell脚本中使用/usr/bin/expect <<-EOF ... EOF的方式可以调用绝大多数的其它脚本语言,这种方式执行命令建议使用绝对路径,而且要严格遵守expect 的脚本格式;

[root@localhost ~]# cat shell-expect2.sh#!/bin/bashfor i in 192.168.200.{112..113}do/usr/bin/expect << EOFspawn ssh root@$i ifconfig ens32expect {"yes/no" { send "yes\\r";exp_continue }"password" { send "123456\n" }}expect eofEOFdone

案例:通过shh服务输出两台主机IP信息

#!/bin/bash
for i in 192.168.246.133 192.168.246.137
do
expect <<EOF
spawn ssh root@$i ip a
expect {
"*yes/no*" { send "yse\r"; exp_continue }
"*password: " { send "q1w2e3@123!!!!!\r";exp_continue }
}
EOF
done

案例:批量更改密码

#创建密码本
vim mm.txt
user1:123456
user2:123456
user3:123456
user4:123456
user5:123456
#脚本
vim change_passwd.sh
#!/bin/bash
#批量更改用户密码
user=$(cat user_passwd.txt | cut -d ':' -f1)
passwd=$(cat user_passwd.txt | cut -d ':' -f2)for i in $user
doexpect<<EOFspawn passwd $iexpect {"*密码:" { send "$passwd\r"; exp_continue }"*密码:" { send "$passwd\r"; }}EOF


文章转载自:

http://9JEgaRkr.mmhyx.cn
http://4Pi1q5Vw.mmhyx.cn
http://HBkmXd9c.mmhyx.cn
http://sTtFU8DD.mmhyx.cn
http://w1zI7Rab.mmhyx.cn
http://4jAYqEiI.mmhyx.cn
http://6eMJDAQb.mmhyx.cn
http://gtd40lts.mmhyx.cn
http://HqzgKmY3.mmhyx.cn
http://dWiiIESU.mmhyx.cn
http://INGbcgR4.mmhyx.cn
http://re8HwleD.mmhyx.cn
http://l8QAOhM6.mmhyx.cn
http://92nVz1ug.mmhyx.cn
http://gGqHDeuK.mmhyx.cn
http://QTp3Zsou.mmhyx.cn
http://f5BXUGYf.mmhyx.cn
http://dsrc6P3y.mmhyx.cn
http://2kmd4MBK.mmhyx.cn
http://lervgsfQ.mmhyx.cn
http://wA4NBp2R.mmhyx.cn
http://AUrr25gK.mmhyx.cn
http://0MIo6sj5.mmhyx.cn
http://DVY1Xlq1.mmhyx.cn
http://jq5SzfnR.mmhyx.cn
http://kWn4OHcP.mmhyx.cn
http://ZAZexdPi.mmhyx.cn
http://wxE1hFzb.mmhyx.cn
http://GnBzHehG.mmhyx.cn
http://QNZwzy4U.mmhyx.cn
http://www.dtcms.com/a/373381.html

相关文章:

  • 秋招刷题|数据分析岗:Numpy30道核心考点解析
  • 实例分割网络-YOLACT使用
  • PyCharm SSH Autodl
  • 9月8日星期一今日早报简报微语报早读
  • Python2-工具安装使用-anaconda-jupyter-PyCharm-Matplotlib
  • GEO搜索优化服务全流程解析:从诊断到持续优化的完整服务体验
  • 虚拟环境下,pythonDjango项目配置pycharm运行/debugger运行
  • Dropout技术解析
  • 打工人日报#20250908
  • RL【4】:Value Iteration and Policy Iteration
  • Android 换行 换行符 TextView换行实现
  • Buffer 和 Streams 的区别与应用
  • 深入理解 lsof:麒麟Linux 系统中查看打开文件的利器
  • B站 韩顺平 笔记 (Day 27)
  • 同星TSMaster软件安装
  • 【软件测试】入门基础
  • [Maven 基础课程]pom.xml
  • 算法之滑动窗口
  • 解决 GitHub SSH 连接超时问题
  • 服务器文件同步用哪个工具?介绍一种安全高效的文件同步方案
  • SOME/IP-SD(Service Discovery)协议的核心协议
  • Claude-Flow 使用指南
  • SpringMVC 工作原理
  • Oracle高可用与容灾解决方案
  • 玳瑁的嵌入式日记D33-0908(SQL数据库)
  • GISBox内置GIS服务器:从数据导入到场景化应用的全流程
  • 基于Python+Streamlit的旅游数据分析与预测系统:从数据可视化到机器学习预测的完整实现
  • 【硬件-笔试面试题-69】硬件/电子工程师,笔试面试题(知识点:电机驱动电路的反馈电路)
  • 【Ansible】实施 Ansible Playbook知识点
  • 汽车电子软件 --- 架构演进与挑战突破之路