awk引用外部变量及调用系统命令方法

目标:想用awk与scp命令批量传送文件

 

前提:先搭好主机间的免密登陆环境(参考:http://www.cnblogs.com/tankaixiong/p/4172942.html)

 

实现脚本方法:

1.在一个文件中记录好各个主机的端口与ip地址,第一列为主机描述信息,参考信息

[root@zejin240 share]# cat scp_port_ip.txt 
host1 33330 192.168.10.11
host2 33331 192.168.20.22
host3 33332 192.168.30.33
host4 33333 192.168.40.44

 

2.编写shell脚本

[root@zejin240 share]# cat scp_all.sh 
#!/bin/bash
src_path='/home/chenzejin/mysql_backup_all.sh'
des_path='/home/chenzejin/mysql_backup_all_from11.sh'
awk '{ cmd="scp -P"$2 "'" $src_path"'"  " chenzejin@"$3":""'"$des_path"'";print cmd  }   ' /mnt/hgfs/share/scp_port_ip.txt

说明:最后一行用awk去调用主机ip与端口的信息,并拼接成一个完事的scp命令,这个脚本中只是打印拼接命令,确定拼接命令正确用,将print cmd改成system(cmd)即可完成真正命令的执行

调试信息如下:

[root@zejin240 share]# sh -x scp_all.sh 
+ src_path=/home/chenzejin/mysql_backup_all.sh
+ des_path=/home/chenzejin/mysql_backup_all_from11.sh
+ awk '{ cmd="scp -P"$2 " /home/chenzejin/mysql_backup_all.sh"  " chenzejin@"$3":""/home/chenzejin/mysql_backup_all_from11.sh";print cmd  }   ' /mnt/hgfs/share/scp_port_ip.txt
scp -P33330 /home/chenzejin/mysql_backup_all.sh chenzejin@192.168.10.11:/home/chenzejin/mysql_backup_all_from11.sh
scp -P33331 /home/chenzejin/mysql_backup_all.sh chenzejin@192.168.20.22:/home/chenzejin/mysql_backup_all_from11.sh
scp -P33332 /home/chenzejin/mysql_backup_all.sh chenzejin@192.168.30.33:/home/chenzejin/mysql_backup_all_from11.sh
scp -P33333 /home/chenzejin/mysql_backup_all.sh chenzejin@192.168.40.44:/home/chenzejin/mysql_backup_all_from11.sh

 

说明:在使用awk命令引用外部变量时,需要注意:外部变量名需要用"'"$src_path"'"这样的格式来引用,而awk中的域信息$0 $1 $2……等不用任何引号包含。

为什么需要用"'"$src_path"'"这样的格式来引用外部变量呢,其实shell在解析时是从左到匹配单引号与双引号的,会一步步解释过去,具体的可以参考其它的文章:http://www.cnblogs.com/mydomain/archive/2012/09/24/2699467.html

 

至此,完成了我们的设定目标。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值