Linux expect中的while循环

Linux expect中的while循环

尬了。sftp的rm一次只能删除一个文件,用shell的循环只能登录一次删一个,效率有点低,而且容易被风控,当然也可以使用脚本提前生成文件一次解决,那就顺便就看了下expect的内嵌循环,真的真是资料有点少。

expect内嵌循环实在是不会用,百度了一下,一知半解,这里记录一下,另外说下expect中的语法多个空格都要报错,只能一点一点排查。

例:sftp一次性删除远端多个文件

https://qnimg.ffing.cn/wp-content/uploads/2022/09/image-29.png?imageView2/0/q/75|watermark/1/image/aHR0cHM6Ly9xbmltZy5mZmluZy5jbi9mbl9sb2dvLnBuZw==/dissolve/55/gravity/SouthEast/dx/0/dy/0

expect脚本如下:

#!/usr/bin/expect
#set变量赋值
set FE_IPADD 192.168.68.160
set FE_USER root
set FE_PWD 123456789
set DEL_PATH /root/filename.txt

set timeout -1
#打开$DEL_PATH文件赋值给NAME
set NAME [open ${DEL_PATH} r]

spawn sftp ${FE_USER}@${FE_IPADD}
expect {
    "yes/no" { send "yes\r"  }
    "password:" { send "$FE_PWD\r" }
    }
    

    #expect的while循环,get读取$NAME变量
    while {[gets $NAME line] >= 0}  {
    #set 赋值FE_FILE
    #$line,while循环行,从第一行开始
    #0代表第一列,1代表第二列。。。
    set FE_FILE   [lindex $line 0]
    expect "sftp>" { send "rm $FE_FILE \n"  }
    }




expect "sftp>" { send "exit \n"  }
close $NAME

功能:从/root/filename.txt读取文件名,登录sftp后,使用expect的while循环进行逐一删除。

good good study, day day up!

发表评论

textsms
account_circle
email

Linux expect中的while循环
尬了。sftp的rm一次只能删除一个文件,用shell的循环只能登录一次删一个,效率有点低,而且容易被风控,当然也可以使用脚本提前生成文件一次解决,那就顺便就看了下expect的内嵌循环,真…
扫描二维码继续阅读
2022-09-25