IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 免交互操作 -> 正文阅读

[系统运维]免交互操作

目录

Expect

安装expect

基本命令

????????脚本解释器

? ? ? spawn

???????expect

????????结束符expect eof

????????Interact

????????set

????????exp_continue

?????????send user

编写脚本


Expect

建立在tcl语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互相关的问题

Expect主要的作用:

  1. 捕捉关键词
  2. 传入交互指令
  3. 跟踪(需要交互的)命令

安装expect

Rpm -q expect

Rpm -q tcl

Yum -y install expect

Yum -y install tcl

基本命令

????????脚本解释器

Expect脚本中首先引入文件,表明使用的是哪一个shell

#!/usr/bin/expect

? ? ? spawn

spawn后面通常跟一个linux执行命令,表示开启一个会话,启动进程,并过呢总后续交互信息

???????expect

判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回,只能捕捉有spawn启动的进程的输出,用于接受命令执行后的输出,然后和期望的字符串匹配

???????send

向进程发送字符串,用于模拟用户的输入,该命令不能自动回车换行,一般要加\r回车或者\n

基本命令:

( 1)脚本解释器

expect脚本中首先引入文件,表明使用的是哪一个shell。#!/usr/bin/expect

(2)spawn

spawn后面通常跟一个Linux执行命令,表示开启一个会话、启动进程,并跟踪后续交互信息。例:spawn passwd root

(3 ) expect

判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回;只能捕捉由spawmn启动的进程的输出;用于接收命令执行后的输出,然后和期望的字符串匹配

( 4 ) send

向进程发送字符串,用于模拟用户的输入;该命令不能自动回车换行,一般要加\r(回车)或者\n

示例1:

#!/bin/bash

#!/usr/bin/ expect

spawn passwd root

expeet"密码{send "abc123\r"}#换行send部分不需要有{ }

示例2:

Expect“密码”

Send“abc123\r” 换行send部分不需要有()

示例三

expect支持多个分支

expect ?#只要匹配了其中一个情况,执行相应的send语句后退出该expect语句

"密码1"{ send "abc123\r"}

"密码2"{ send "123456\r"}

"密码3"{send "123123\r"}

????????结束符expect eof

表示交互结束,等待执行结束,退回到原用户,与spawn对应,比如切换到root用户,expect脚本默认的是等待10s,当执行完命令后,默认停留10s后自动切回原用户

????????Interact

执行完成后保持交互状态,把控制权交给控制台,会停留在目标终端而不会退回到原终端,这个时候就可以手工操作了,interact后的命令不起作用,比如interact后添加exit,并不会退出root用户,而如果没有interact则登录完成后会退出,而不是留在远程终端上,使用interact会保持在终端而不会退回到root用户,会一直在root用户状态下,比如ssh到另一服务器,会一直在目标服务器终端,而不会切原服务器。

注意,expect eof 与 interact只能二选一

????????set

Expect默认的超时时间是10秒,通过set命令可以设置会话超时时间,若不限制超时时间则应设置为-1.

????????exp_continue

附加于某个expect判断项之后,可以使该项被匹配后,还能继续匹配该expect-判断语句内的其他项。exp_continue类似于控制语句中的continue语句。表示允许expect继续向下执行指令。

例如:下例将判断交互输出中是否存在yes/no或*password。如果匹配 yes/no则输出 yes并再次执行判断;如果匹配*password则输出abc123并结束该段expect语句。

expect {" ( yes/no) " i send "yes\r"; exp _continue ; }"

*password"{ set timeout 300; send "abc123\r"; }

注意:使用exp continue时,如果跟踪像passwd这样的输入密码后就结束进程的命令,expect{ }外不要再加上expect eof因为spawn进程结束后会默认向expect发送eof,会导致后面的expect eof执行报错

注:表示允许用户进行交互操作,一直.保持会话连接

?????????send user

Send_ user 表示会先命令,相当于echo

?????????接收参数

expect脚本可以接受从bash命令行传递的参数,使用[lindex $argv0]获得。其中n从o开始,分别表示第一个,第二个,第三个..参数。例:set hostname [ lindexr $argv 0]

相当于hostname=$1

set password [ lindex $argv 1]相当于password=$2

编写脚本

#!/usr/bin/expect

spawn ssh root@192.168.239.129

expect {

?"password:"

? { send "123456\r"; }

}

Interact

执行后如上图这里需需要继续捕捉关键词 (yes/no)?

Expect eof

表示不需要进行交互了,意味着结束expect程序,如果不屑的话不会执行操作直接退出,如果不屑写interact也无法再对方机器上执行命令,eof可以加上expect eof十秒后会自动退出,interact表示持续交互

嵌入执行模式,静expect过程融入至shell中,方便执行和处理

再shell脚本中调用expect

示例:

创建用户并设置用户密码

#!/bin/bash

Username=$1

Useradd $username

/usr/bin/expect <<-EOF

Spawn passwd $username

Expect {

“密码”

{ send “123456\r”;exp_continue}

“新的密码”

{ send “123456\r”; }

}

EOF

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:40:15  更:2022-08-19 19:42:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 22:03:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码