在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Shell编程中Expect免交互的示例分析

156次阅读
没有评论

共计 2905 个字符,预计需要花费 8 分钟才能阅读完成。

本篇文章给大家分享的是有关 Shell 编程中 Expect 免交互的示例分析,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。

Expect 概述

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

基本命令 send:向进程发送字符串,用于模拟用户的输入

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

expect

expect 的一个内部命令,判断上次输出结果里是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回

只能捕捉由 spawn 启动的进程的输出

spawn:启动进程,并跟踪后续交互信息 interact:执行完成后保持交互状态,把控制权交给控制台 Timeout:指定超时时间,过期则继续执行后续指令

单位是:秒

timeout -1 为永不超时

默认情况下,timeout 是 10 秒

exp_continue

允许 expect 继续向下执行指令

send_user

回显命令,相当于 echo

$argv 参数数组

Expect 脚本可以接受从 bash 传递的参数,可以使用 [lindex $argv n] 获得,n 从 0 开始,分别表示第一个,第二个,第三个 … 参数

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

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

Expect 语法单一分支语法

expect password: {send mypassword\r}

多分支模式语法 send 命令不具备回车换行功能,一般要加 \r 或 \n

expect aaa {send AAA\r}
expect aaa {send AAA\r}
expect aaa {send AAA\r}

只要匹配了 aaa 或 bbb 或 ccc 中的任何一个,执行相应的 send 语句后退出该 expect 语句

expect {
aaa {send AAA\r}
bbb {send BBB\r}
ccc {send CCC\r}
}

exp_continue 表示继续后面的匹配,如果匹配了 aaa,执行完 send 语句后还要继续向下匹配 bbb

expect {
aaa {send AAA\r exp_continue}
bbb {send BBB\r exp_continue}
ccc {send CCC\r}
}

-re 参数表示匹配正则表达式 Expect 执行方式直接执行

SSH 登录
首次登陆
正常登录
连接被拒绝, 可能 ssh 没开, 或端口号不对, 亦或是防火墙限制
没有该连接地址

#!/usr/bin/expect //Expect 二进制文件的路径
#超时时间
set timeout 20 //20 秒等待时间
log_file test.log // 日志文件
log_user 1 // 日志用户
#参数传入
set hostname [lindex $argv 0] // 追加参数 0,统计变量并加载第 1 位置参数
set password [lindex $argv 1] // 追加参数 1,统计变量并加载第 2 位置参数
#追踪命令
spawn ssh root@$hostname // 追踪命令
#捕捉信息并匹配免交互执行
expect { // 捕捉提示信息
  Connection refused  exit // 捕捉到拒接连接信息即退出
  service not konwn  exit // 捕捉到服务为开启信息即退出
  (yes/no)  //  捕捉 yes 或 no 参数
 {send  yes\r exp_continue} // 输入 yes 并继续执行  
  *password  //  捕捉参数  
 {send  $password\r} // 输入密码参数  
#控制权交予控制台
interact // 控制权转交控制台人为输入
[root@localhost ~]# ./expect.sh 192.168.109.132 baby520./
spawn ssh [email protected]
[email protected] s password: 
Last login: Thu Oct 10 16:52:48 2019 from 192.168.109.10
[root@localhost ~]#

Expect 执行方式嵌入执行

#!/bin/bash 
user=$1
password=$2
#非交互命令放 expect 外面
useradd $user
#开始交互
expect  -EOF //Expect 开始标志, 标准性输入, 等同于 stdin
spawn passwd $user
expect  新的 * 
send  $password\r 
expect  重新 * 
send  $password\r 
expect eof;
EOF //Expect 结束语句,EOF 前后不能有空格
[root@localhost ~]# ./expect.sh 192.168.109.132 baby520./
spawn ssh [email protected]
[email protected] s password: 
Last login: Thu Oct 10 17:38:16 2019 from 192.168.109.133
[root@localhost ~]# exit
Connection to 192.168.109.132 closed.

案例 1

创建自定义用户,密码自定义

#!/bin/bash
username=$1
password=$2
useradd $username
/usr/bin/expect  -EOF
spawn passwd $username
expect {
  新的 * 
 {send  $password\r exp_continue}
  重新 * 
 {send  $password\r}
[root@localhost ~]# ./tom.sh test2 123123
spawn passwd test2
更改用户  test2  的密码  。新的   密码:无效的密码:  密码少于  8  个字符
重新输入新的   密码:passwd:所有的身份验证令牌已经成功更新。

案例 2

利用 expect 完成 FTP 登录过程

#!/usr/bin/expect -f
set timeout 20
spawn ftp 192.168.109.133
expect  Name* 
send  ftp\r 
expect  Password:* 
send  \r 
expect  ftp * 
interact
expect eof

以上就是 Shell 编程中 Expect 免交互的示例分析,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计2905字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国产一区二区精品久久岳 | 日本1区二区三区公司 | 久久亚洲成a人片 | 国产福利视频在线播放 | 真人与拘做受免费视频 | 国产一级片毛片 | 国内精品视频一区 | 在线看片a | 在线观看亚洲av每日更新 | 国产色视频一区二区三区qq号 | 精品丝袜 | 日韩欧美亚洲国产 | 国产激情片 | 亚洲精品一区二区四季 | 国产福利一区二区精品免费 | 黄网站免费在线观看 | 亚洲国产最大av | 最近中文字幕最新在线视频 | 亚洲无线码一区二区三区 | 偷拍自拍亚洲图片 | 天堂网www在线资源中文 | 欧美私人情侣网站 | 亚洲欧美日韩久久精品第一区 | 精品国产成人一区二区 | 在线激情网站 | 深夜影院在线 | 国产精品美女久久久久网站 | 久久精品中文字幕免费 | 国模大胆偷拍在线视频 | 亚洲成人观看 | 麻豆视频91| 99爱这里只有精品 | 久久av无码专区亚洲av桃花岛 | 久久婷婷五月综合色99啪ak | 日本特级 | 亚洲午夜小视频 | 啪啪成人 | 欧美日韩亚洲另类 | 国产欧美在线观看不卡 | 人妻哺乳奶头奶水 | 国产成人高清在线 |