expect属于tcl语言,用于实现自动和交互式任务程序语言进行通信,无需人工干预
#!/usr/bin/expect
set file xxx.exe
set dir /home/vtu
set srcfile src_pfu
#set destfile dest_pfu
set vtuname xxx
set tecsname xxx
set VtuPWD xxx
set TecsPWD xxx
set RootPWD xxx
set pf_sc {docker ps|grep pf_sc}
set arrNode {192.168.9.11
192.168.9.12
192.168.9.13
192.168.9.14}
foreach node $arrNode {
set timeout 5
spawn scp $dir/$file $vtuname@$node:$dir //spawn新建进程
expect "password:" {send "$VtuPWD\r"}
spawn ssh $tecsname@$node
expect "password:" {send "$TecsPWD\r"}
expect "tecs" {send "sudo -i\r"}
expect "root@tep" {send "$pf_sc\r"}
expect "k8s" { regexp {[a-z0-9]{12}} $expect_out(buffer) PFUname} //refexp正则表达式匹配,$expect_out(buffer)的值可以通过在调试模式(#!/usr/bin/expect -d)看到
expect "tep-v1-r1-s1" {send "mkdir $dir/$srcfile\r"} //mkdir指定绝对路径,否则目录会建在/root/下
expect "tep-v1-r1-s1" {send "docker cp $PFUname:/home/$file $dir/$srcfile\r"}
expect "root@tep" {send "docker cp $dir/$file $PFUname:/home\r"}
expect "root@tep" {send "rm $dir/$file\r"} //指定绝对路径,不然找不到
expect "remove" {send "y\r"}
expect "root@tep" {send "docker restart $PFUname\r"}
expect eof //https://blog.csdn.net/modi000/article/details/107115286
}
链接:
foreach使用:https://blog.csdn.net/ciscomonkey/article/details/118881550
expect脚本中使用expect eof 和使用interact的区别:https://blog.csdn.net/modi000/article/details/107115286
expect命令:https://www.cnblogs.com/lixigang/articles/4849527.html
tcl教程:https://www.yiibai.com/tcl
Linux使用shell脚本实现目录创建与文件传输:https://blog.csdn.net/xi_rurensheng/article/details/111462239?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166158140116782395364984%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=166158140116782395364984&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-2-111462239-null-null.142v42control,185v2control&utm_term=expect%E8%BF%9C%E7%A8%8B%E5%88%9B%E5%BB%BA%E7%9B%AE%E5%BD%95%E5%A4%B1%E8%B4%A5&spm=1018.2226.3001.4187
正则表达式:https://www.runoob.com/regexp/regexp-syntax.html