大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
第1章 expect 概括
expect 期待
expect是Unix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制;也可利用Tk工具,将交互程序包装在X11的图形用户界面中。
我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,比如普通用户使用sudo命令时就需要我们手动输入密码;expect就是能够完成这种自动交互任务,而无需人的干预。
第2章 使用总结:
为什么先写总结,刚才是自己使用expect也纠结了一会,总结下,在结合下面的两个案例
1、需要注意先规划好expect 大概结构,实现效果,需要参数,路径、命令
2、写shell脚本注意shell脚本中的变量需要对于expect中的变量.
2.1 使用例子
2.2 首先安装expect
[shell]
Centos OS yum 安装
yum install -y expect
Ubuntu 系统安装
apt-get install expect
[/shell]
2.3 例子一:SSH 自动远程支持mkdir
#提示写expect 需要两个脚本一个 .exp 和 .sh 如下:
#创建一个expect自动执行脚本
[shell]
root@xuebao shell]# cat expect_mkdir.exp
#!/usr/bin/expect
set date [lindex $argv 0]
set password [lindex $argv 1]
#spawn scp $src_file $username@$host:$dest_file
spawn ssh 192.20.3.99 mkdir /home/tbt/webappdata/backup/$date
expect {
“yes/no” {send “yes\r”;exp_continue}
“*password” {send “$password\r”}
}
expect eof
[/shell]
#脚本解释
[shell]
[root@xuebao shell]# cat expect_mkdir.exp
#!/usr/bin/expect #解释器,告诉操作系统,使用expect必须加。
set date [lindex $argv 0] # expect脚本可以接受从shell 脚本中传递过来的参数.可以使用n从0开始,分别表示第一个,第二个,第三个….参数
set password [lindex $argv 1] #从shellz中传递密码
spawn ssh 192.20.3.99 mkdir /home/tbt/webappdata/backup/$date # spawn后面加上需要执行的shell命令、其中$date 是加的shell脚本中的时间变量
expect {
“yes/no” {send “yes\r”;exp_continue} #行交互动作,与手工输入密码的动作等效。
“*password” {send “$password\r”} #行交互动作,与手工输入密码的动作等效。
}
expect eof
[/shell]
注意:expect脚本必须以expect eof结束。
2.4 相对于的shell脚本
[shell]
[root@xuebao shell]# cat expect_mkdir.sh
#!/bin/sh
#####################
#by xuebao
#2017.05.27
#####################
date=`date +%Y%m%d` #定义了一个时间变量
password=123456 #传递密码
cd /home/shell #进入存放expect_mkdir.exp 的目录
./expect_mkdir.exp $date $password #执行并传参
[/shell]
2.5 例子2 自动SCP 命令
[shell]
[root@xuebao shell]# cat expect_app.exp
#!/usr/bin/expect
set host [lindex $argv 0]
set port [lindex $argv 1]
set username [lindex $argv 2]
set password [lindex $argv 3]
set src_file [lindex $argv 4]
set dest_file [lindex $argv 5]
#spawn scp $src_file $username@$host:$dest_file
spawn scp -P $port -r $src_file $username@$host:$dest_file
expect {
“yes/no” {send “yes\r”;exp_continue}
“*password” {send “$password\r”}
}
expect eof
[/shell]
2.6 相对于的shell脚本
[shell]
[root@xuebao shell]# cat expect_app.sh
#!/bin/sh
#####################
#by xuebao
#2017.05.27
#####################
DATE=`date +%Y%m%d`
src_file=”/home/tbt/webappdata/$DATE/test* “
dest_file=”/home/tbt/webappdata/backup/$DATE/”
host=109.202.3.100
port=22
username=root
password=12345678
#scp back host
cd /home/shell
./expect_app.exp $host $port $username $password $src_file $dest_file
echo “end”
[/shell]
最后提示:
如果文件scp 文件过大、传送中断开,因为expect默认timeout为30S
手动添加set timeout -1设置超时时间为无穷大,问题解决
在expect 脚本中添加
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234612.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...