博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell expect
阅读量:6086 次
发布时间:2019-06-20

本文共 1678 字,大约阅读时间需要 5 分钟。

关键的action

spawn     调用要执行的命令

expect     捕捉用户输入的提示
send        发送需要交互的值,替代了用户手动输入内容
set           设置变量值

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

expect eof 这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if....endif

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

set timeout -1    设置expect永不超时

set timeout 300    设置expect 300秒超时,如果超过300没有expect内容出现,则推出

实例一:部署简单的apache,部署的脚本事先写好,expect先登录主机在远程scp到脚本本地,执行脚本

#!/usr/bin/expect

 

set ip [lindex $argv 0]                #注意:$argv 0 是第一个参数,不是脚本名

set name [lindex $argv 1]

                                 #三种情况:直接输密码;

                    #从未登录远程的主机,需要输入yes确认

#远程主机不可达

spawn ssh root@$ip

expect "(yes/no)?" {

send "yes\r"

expect "password:"

send "redhat\r"

} "password:" {send "redhat\r"} "* host" {exit 1}        

 

#注意每个expect的情况,中间一定有个空格

 

expect "#"

#scp apache的部署脚本

send "scp root@172.25.12.250:/home/wxl/Desktop/shell/apache.sh /mnt\n"    

expect "(yes/no)?" {

send "yes\r"

expect "password:"

send "redat\r"

} "password:" { send "redhat \r" }

expect "#"

send "sh /mnt/apache.sh $name;exit\r"

expect eof                                    #结束标志,关闭对话

 

foreach的用法:相当于数组这么个概念。为数组中的每个元素都执行下面动作

实例二

[root@server1 note]# cat sshv.sh

#!/usr/bin/expect

 

foreach ip {

192.168.88.121

192.168.88.123

} {

spawn ssh root@$ip

expect "(yes/no)?" {

send "yes\r"

expect "password:"

send "redhat\r"

} "password:" {send "redhat\r"} "* host" {exit 1}

 

expect "#"

send "hostname;exit\r"

expect eof

}

 

shell脚本和expect的结合但是expect脚本里最好指定解释器

实例三:从文件中读取账户密码,expect自动登录,进行操作;

shell程序:

#!/bin/bash

for ip in `awk '{print $1}' passwd.txt`

do

pass=`awk -v i="$ip" '{if(i==$1)print $2}' passwd.txt`        

#-v设定变量, 如果当前行的$1就是ip和所设定的变量ip(原来的$1)

#那么就取出$2(密码)

expect vssh.sh $ip $pass

done

 

expect程序:

    和实例一差不多。

pass.txt:

    172.25.12.11 redhat

  172.25.254.18 centos

转载于:https://www.cnblogs.com/wxl-dede/p/5009214.html

你可能感兴趣的文章
CentOS6.4关闭触控板
查看>>
React Native 极光推送填坑(ios)
查看>>
Terratest:一个用于自动化基础设施测试的开源Go库
查看>>
修改Windows远程终端默认端口,让服务器更安全
查看>>
扩展器必须,SAS 2.0未必(SAS挺进中端存储系统之三)
查看>>
Eclipse遇到Initializing Java Tooling解决办法
查看>>
while((ch = getchar()) != '\n')
查看>>
好程序员web前端分享JS检查浏览器类型和版本
查看>>
Oracle DG 逻辑Standby数据同步性能优化
查看>>
exchange 2010 队列删除
查看>>
「翻译」逐步替换Sass
查看>>
H5实现全屏与F11全屏
查看>>
处理excel表的列
查看>>
C#数据采集类
查看>>
quicksort
查看>>
【BZOJ2019】nim
查看>>
LINUX内核调试过程
查看>>
【HDOJ】3553 Just a String
查看>>
Java 集合深入理解(7):ArrayList
查看>>
2019年春季学期第四周作业
查看>>