expect 交互命令与rsync文件同步

介绍

expect命令是一个自动化工具,可以根据脚本与其他交互式程序进行交互,通过在脚本中设定期望值和响应值进行交互操作,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。

expect中,有三个重要的主命令,分别是spawn、expect、exp_send,这三个命令几乎存在于所有expect脚本中,除了这些之外,还有很多expect所特有的参数、变量,它们也作用于expect的方方面面。spawn激活,send发送到交互命令。


rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。

说明

本文脚本主要是通过调用实现文件批量自动与多台服务器进行交互更新。

文件列表:

  • auto_expect:expect命令的执行模板。
  • ip_list_config:存放IP和密码的配置文件,IP在前,与密码之间用空格或tab隔开。
  • sync_file.sh:待执行脚本

auto_expect

#!/usr/bin/expect -f
spawn rsync -avzP source root@$ip:dest
expect {
    "(yes/no)?" {send "yes\r";exp_continue}
    "password:" {send  "$pwd\r"}
}
expect eof

ip_list_config

192.168.0.1 passwd1
192.168.0.2 passwd1
192.168.0.3 passwd1

sync_file.sh

#!/usr/bin/expect -f   
################define variables###############
path=`pwd` 
################begin of main #################      
 
show_usage()   
{   
        echo "USAGE:$0"   
        echo "          [-s | -source]"   
        echo "          [-d | -des   ]"   
        echo "          [-h | -help  ]"   
}   
   
auto_rsync()   
{   
        while read iplist   
        do   
                ip=`echo $iplist | awk '{print $1}'`   
                pwd=`echo $iplist | awk '{print $2}'`   
                echo -e "$iplist\n"   
                echo "rsync -avzp $source_file root@$ip:$des_file"   
                sed -e "s;source;$source_file;g" auto_expect>auto_expect_rsync   
                sed -i "s;dest;$des_file;g" auto_expect_rsync   
                sed -i "s;\$ip;$ip;g" auto_expect_rsync   
                sed -i "s;\$pwd;$pwd;g" auto_expect_rsync   
                chmod +x $path/auto_expect_rsync   
                $path/auto_expect_rsync   
        done < $path/ip_list_config   
}   
auto_ssh()   
{   
        while read iplist   
        do   
                ip=`echo $iplist | awk '{print $1}'`   
                pwd=`echo $iplist | awk '{print $2}'`   
                echo -e "$iplist\n"   
                echo "ssh root@$ip"   
                sed -e "s;source;;g" auto_expect>auto_expect_ssh   
                sed -i "s;rsync -avzP;ssh;g" auto_expect_ssh   
                sed -i "s;:dest;;g" auto_expect_ssh   
                sed -i "s;\$ip;$ip;g" auto_expect_ssh   
                sed -i "s;\$pwd;$pwd;g" auto_expect_ssh   
                chmod +x $path/auto_expect_ssh   
        done < $path/ip_list_config   
        exit 1   
}   
if [ $# -ne 4 ];then   
        echo -e "\e[32;5;1m please input current!! \e[0m\n"   
        show_usage;   
        exit 1;   
fi   
   
while true   
do   
        case "$1" in   
        -h | -help)   
        show_usage   
        ;;   
        -s | -source) source_file=$2   
        echo $soutce_file   
        shift 2   
        ;;   
        -d | -dest) des_file=$2   
        echo $des_file   
        auto_rsync   
        auto_ssh   
        ;;   
        *)   
        show_usage   
        exit 1   
        ;;   
        esac   
done

执行

sh sync_file.sh -s source_file -d des_file
  • -s:源文件地址
  • -d:传输到的目的地址

分享、在看与点赞
只要你点,我们就是胖友


来自: expect 交互命令与rsync文件同步icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=Mzk0NTQ3OTk3MQ==&mid=2247486085&idx=1&sn=2aa93e314bd9dd055e58459c39a6db0c&chksm=c31582c9f4620bdf6ee8014dd1aa791ed346395353bbebdc62b6aa92e204b325ce38769b46d1&token=355315523&lang=zh_CN#rd

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux技术宅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值