shell编程(下)

一、shell项目-分发系统-expect讲解

•  yum install -y expect        //安装命令

 

 

二、 自动远程登录

cd /usr/local/sbin 

vim 1.expect        //编辑如下内容

#! /usr/bin/expect

set host "192.168.0.182"

set passwd "abc-123"

spawn ssh root@$host

expect {

"yes/no" { send "yes\r"; exp_continue}

"password:" { send "$passwd\r" }

}

interact

 

53b0d63738c93bb3ae3be9e9ea1abc8e69b.jpg

 

interact          //需要停留在远程的机器上,不需要退出

expect eof     //登录到机器,会暂停1-2秒,然后自动退出

 

使用ssh远程登录

ca736a6c0533268991237094c6fe39e58c6.jpg

 

 

vim /root/.ssh/known_hosts       //清空连接记录,继续登陆会提示是否建立连接

 

chmod a+x 1.expect         //更改脚本权限

./1.expect                          //执行脚本

2413d1c9312e29ee1f55fadc537905b9c0a.jpg

 

 

 

三、自动远程登录后,执行命令并退出

cd /usr/local/sbin 

vim 2.expect        //编辑如下内容

#!/usr/bin/expect

set user "root"

set passwd "abc-123"

spawn ssh $user@192.168.0.182

expect {

"yes/no" { send "yes\r"; exp_continue}

"password:" { send "$passwd\r" }

}

expect "]*"

send "touch /tmp/12.txt\r"

expect "]*"

send "echo 1212 > /tmp/12.txt\r"

expect "]*"

send "exit\r"

 

5baf28d169e666468f7f2d3a94328a810b6.jpg

 

chmod a+x 2.expect          //更改脚本权限

./2.expect                         //执行脚本

9d84aff33677627a9d475336d2478c321d0.jpg

 

验证192.168.0.182上是否生成文件

dc59c678ff12bbc2d102a3ecdee8753d4d7.jpg

 

 

四、expect脚本传递参数

•  传递参数

cd /usr/local/sbin 

vim 3.expect        //编辑如下内容

#!/usr/bin/expect

set user [lindex $argv 0]

set host [lindex $argv 1]

set passwd "abc-123"

set cm [lindex $argv 2]

spawn ssh $user@$host

expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect "]*"

send "$cm\r"

expect "]*"

send "exit\r"

 

b6ca2b8dc757fd3d72d905b338877582e8c.jpg

 

chmod a+x 3.expect      //更改脚本权限

8ba2ddd761f5e4d99c343b618ce07e1a11d.jpg

 

默认10s退出系统

e83843e7c665db7c5489cecccfd07eb9647.jpg

 

cd /usr/local/sbin 

vim 3.expect        

7d98d68eeaeafca20b39638ce90a2d2d450.jpg

 

测试

d97d6a390bfc63eac456725a11b576435fd.jpg

 

 

五、expect脚本同步文件

• 自动同步文件

cd /usr/local/sbin 

vim 4.expect        //编辑如下内容

#!/usr/bin/expect

set passwd "abc-123"

spawn rsync -av root@192.168.0.182:/tmp/12.txt /tmp/

expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect eof

 

ee7d0ac1957961b01b31ccb48c4e5c6a23c.jpg

 

yum install -y rsync         //保证2台机器都执行安装rsync命令

chmod a+x 4.expect        //更改脚本权限

e99d31dd5f85c4068341aae18a5030aa818.jpg

 

cd /usr/local/sbin 

vim 4.expect     

b88ee4d29e0a0088bb7abc505eedb0f7ba6.jpg

 

执行脚本,登录机器后立马退出

2a76887320a2d33e094d70bccc4747a6727.jpg

 

 

六、expect脚本指定host和要同步的文件

cd /usr/local/sbin 

vim 5.expect        //编辑如下内容

#!/usr/bin/expect

set passwd "abc-123"

set host [lindex $argv 0]

set file [lindex $argv 1]

spawn rsync -av $file root@$host:$file

expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect eof

 

 

4d07c24ec36438c4d2fefe4f1996839d49e.jpg

 

chmod a+x 5.expect              //更改脚本权限

./5.expect 192.168.0.182 "/tmp/12.txt"         //本地文件同步到远程

260e7f84c179c3ff48996dc46f9101bfe1a.jpg

 

 

七、shell项目-分发系统-构建文件分发系统

• 需求背景

对于大公司而言,肯定时不时会有网站或者配置文件更新,而且使用的机器肯定也是好多台,少则几台,多则几十甚至上百台。所以,自动同步文件是至关重要的。

• 实现思路

首先要有一台模板机器,把要分发的文件准备好,然后只要使用expect脚本批量把需要同步的文件分发到目标机器即可。

• 核心命令

rsync -av --files-from=list.txt  /  root@host:/

 

• 文件分发系统的实现

cd /usr/local/sbin 

vim rsync.expect       //编辑如下内容

#!/usr/bin/expect

set passwd "abc-123"

set host [lindex $argv 0]

set file [lindex $argv 1]

spawn rsync -avR  --files-from=$file / root@$host:/

expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect eof

 

edc6ac5f9f526a6258142129974d077922a.jpg

 

chmod a+x rsync.expect         //更改脚本权限

 

创建文件列表,编辑文件路径

bda99ad8f42aaba533afc21da678d30be1e.jpg

 

编辑ip列表,执行脚本的前提是需要2台机器的密码一致

bd953477cc3498482ba9fdde31eea01bc13.jpg

 

cd /usr/local/sbin 

vim rsync.sh       //编辑如下内容

#!/bin/bash

for ip in `cat /tmp/ip.list`

do

    ./rsync.expect $ip /tmp/file.list

done

 

 

3e8baf371d2dc018613a7e2670fb156016b.jpg

 

 

sh -x rsync.sh           //执行脚本

bc23c93775edbf86a2f7f5c7f5250b0fba4.jpg

 

查看192.168.0.182上面是否有该文件

16db2a4dd85829d1312c25a16a276ee2325.jpg

 

八、shell项目-分发系统-命令批量执行

cd /usr/local/sbin 

vim exe.expect      //编辑如下内容

#!/usr/bin/expect

set host [lindex $argv 0]

set passwd "abc-123"

set cm [lindex $argv 1]

spawn ssh root@$host

expect {

"yes/no" { send "yes\r"}

"password:" { send "$passwd\r" }

}

expect "]*"

send "$cm\r"

expect "]*"

send "exit\r"

 

4771fb0682d97469079324682f0e54f9963.jpg

 

chmod a+x exe.expect           //更改脚本权限

 

 

 

cd /usr/local/sbin 

vim exe.sh      //编辑如下内容

#!/bin/bash

for ip in `cat /tmp/ip.list`

do

    echo $ip

    ./exe.expect $ip "ls /tmp"

done

 

422c27f8725d1101f48be49f373a69cc2cf.jpg

 

sh exe.sh         //执行脚本

9093075174a7251302a7d2b8a21e7d366ec.jpg

 

 

转载于:https://my.oschina.net/u/3991860/blog/3003143

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值