Shell编程——Expect免交互
Expect概述
基本命令send:向进程发送字符串,用于模拟用户的输入
expect
spawn:启动进程,并跟踪后续交互信息interact:执行完成后保持交互状态,把控制权交给控制台Timeout:指定超时时间,过期则继续执行后续指令
exp_continue
send_user
$argv 参数数组
Expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了
Expect语法单一分支语法
多分支模式语法send命令不具备回车换行功能,一般要加r或n
只要匹配了aaa或bbb或ccc中的任何一个,执行相应的send语句后退出该expect语句
exp_continue表示继续后面的匹配,如果匹配了aaa,执行完send语句后还要继续向下匹配bbb
-re参数表示匹配正则表达式Expect执行方式直接执行
#!/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 [email?protected]$hostname //追踪命令 #捕捉信息并匹配免交互执行 expect { //捕捉提示信息 "Connection refused" exit //捕捉到拒接连接信息即退出 "service not konwn" exit //捕捉到服务为开启信息即退出 "(yes/no)" // 捕捉yes或no参数 {send "yesr";exp_continue} //输入yes并继续执行 "*password" // 捕捉参数 {send "$passwordr"} //输入密码参数 } #控制权交予控制台 interact //控制权转交控制台人为输入 [[email?protected] ~]# ./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 [[email?protected] ~]# Expect执行方式嵌入执行#!/bin/bash user=$1 password=$2 #非交互命令放expect外面 useradd $user #开始交互 expect <<-EOF //Expect开始标志,标准性输入,等同于stdin spawn passwd $user expect "新的*" send "$passwordr" expect "重新*" send "$passwordr" expect eof; EOF //Expect结束语句,EOF前后不能有空格 [[email?protected] ~]# ./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 [[email?protected] ~]# 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 "$passwordr";exp_continue} "重新*" {send "$passwordr"} } EOF [[email?protected] ~]# ./tom.sh test2 123123 spawn passwd test2 更改用户 test2 的密码 。 新的 密码: 无效的密码: 密码少于 8 个字符 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 案例2
#!/usr/bin/expect -f set timeout 20 spawn ftp 192.168.109.133 expect "Name*" send "ftpr" expect "Password:*" send "r" expect "ftp>*" interact expect eof 谢谢阅读!!!(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |