Linux·shell远程传输文件

下载expect命令 sudo apt-get install expect spawn: 是开一个新的进程去执行后面的命令 expect:是获取spawn命令执行后的信息,看看是否和其事先指定的相匹配,如果匹配就会执行后面的内容。如果单独写expect不写spawn,就不会触发。 send: 发送指定的字符给系统。 exp_continue: 是让expect继续往下匹配。 eof: 关键字用于匹配结束符。 expect 中scp命令传输文件是单个执行的需要具体到文件名
#!/bin/bash/

hd=(86 19 91 71 13 51 36 70 31 30 17 11 34 75 74 81 87 89 79 88 10 83 90 76 84 85 97 18 38 59 50 ZZZZ )
# 打印数组的个数
echo "打印数组的个数" ${
          
   #hd[@]}

# 获取上月的时间
NowTime=`date -d "1 month ago" +"%Y%m"`
# 指定传输文件的月份
# NowTime=202209
# 远程服务器密码
password=123456
 
echo "省份文件传输开始"
for ((i=0;i<${#hd[@]};i++))
do
# 文件名 
hd_name_3=${hd[i]}settlement${NowTime}.zip
hd_name_8=${hd[i]}new_settlement${NowTime}.zip
 
echo 当前传输的文件名: ${hd_name}

# scp -p 远程端口 -r 本地路径 用户名@ip:/远程路径
# 远程传输
# 三个文件的传输
expect -c "
    spawn scp -r /rxldc/${hd_name_3} acc@ip:/home/ldcc/
    expect {
        "*assword" {set timeout 300; send "${password}
"; exp_continue;}
        "yes/no" {send "yes
";}
    }
expect eof" 

# 八个文件的传输
expect -c "
    spawn scp -r /rxldc/${hd_name_8} acc@ip:/home/ldcc/
    expect {
        "*assword" {set timeout 300; send "${password}
"; exp_continue;}
        "yes/no" {send "yes
";}
    }
expect eof" 

done
echo ===文件传输完成====
经验分享 程序员 微信小程序 职场和发展