awk引用外部变量及调用系统命令方法
目标:想用awk与scp命令批量传送文件
前提:先搭好主机间的免密登陆环境(参考:http://www.cnblogs.com/tankaixiong/p/4172942.html)
实现脚本方法:
1.在一个文件中记录好各个主机的端口与ip地址,第一列为主机描述信息,参考信息
[root@zejin240 share]# cat scp_port_ip.txt
host1 192.168.10.11
host2 192.168.20.22
host3 192.168.30.33
host4 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
至此,完成了我们的设定目标。
awk引用外部变量及调用系统命令方法的更多相关文章
- shell if判断(曾经被一个字符串相等的判断纠结半小时,最后只是if后少了个空格!) 和 awk引用外部变量判断
一.if判断 数字: $A=12 $B=15 if(("$A"<"$B")) if(("$A"=="$B")) 字 ...
- 【shell】awk引用外部变量
在使用awk的过程中,经常会需要引用外部变量,但是awk需要使用单引号将print包起来,导致print后的$引用无效,可以采用下面的方式 例如: #!/bin/bash a="line1 ...
- Python:字符串中引用外部变量的3种方法
方法一: username=input('username:') age=input('age:') job=input('job:') salary=input('salary') info1='' ...
- JavaScript获取后台C#变量以及调用后台方法
http://www.educity.cn/develop/495493.html 有时需要在JavaScript中获取后台变量的值,来判断JavaScript的执行逻辑,或者需要调用C#后台方法获取 ...
- block引用外部变量原理
block在赋值时才会生成对应的block结构体实例(结构体数据结构在编译时已经生成),赋值时会扫一遍里面引用的外部变量(嵌套block中的外部变量也算,只不过嵌套block中的外部变量会被内外两个b ...
- awk获取外部变量
语法 awk [ -F re] [parameter...] ['pattern {action}' ] [-f progfile][in_file...] 获得普通外部变量 [xingxing.dx ...
- python函数定义中引用外部变量的一个问题
如果在函数定义的默认值中引用了一个外部变量,如下所示 x = 3 def func(a = x): print(a, x) 那么a的默认值就会是3, 但是print语句中的x会是调用时的x值 lamb ...
- awk 根据外部变量匹配某一域值
shell>> i='a' awk '$1 ~ /'$i'/ {print $0}' test.txt awk中,变量 增加单引号即可
- 外部事件触发调用对象方法时this指向问题
问题如下: var obj = { name: 'dang', test:function(){ alert(this.name); } }; obj.test(); //这样是可以的 $('.box ...
随机推荐
- Java蛇形数组的简单实现代码
上周五和朋友聊天谈到个蛇形数组的java实现办法,命题是:假设一个二维数组宽w高h,从1开始蛇形输出. int[][] numberMatric = new int[w][h]; 当时午睡过头脑袋不清 ...
- Redis优化总结
# 注意在redis.conf中的小聚合数据类型的特殊编码设置(http://carlosfu.iteye.com/blog/2254572)```hash-max-zipmap-entries 64 ...
- sublime3 配置node build环境
折腾了很久,原来如此简单 1.package control 安装nodejs 2.修改Nodejs.sublime-settings文件,将nodejs路径修改成自己的 3.sublime tex ...
- python排序算法的实现-选择
1.算法: 对于一组关键字{K1,K2,…,Kn}, 首先从K1,K2,…,Kn中选择最小值,假如它是 Kz,则将Kz与 K1对换: 然后从K2,K3,… ,Kn中选择最小值 Kz,再将Kz与K2对换 ...
- C# Activex开发、打包、签名、发布 C# Activex开发、打包、签名、发布 [转]
C# Activex开发.打包.签名.发布 2013-06-22 12:01:20 浏览:3823 一.前言 最近有这样一个需求,需要在网页上面启动客户端的软件,软件之间的通信.调用,单单依靠HTML ...
- ubuntu(Mint-17)修改dns
国内默认dns常被劫持,所以需要修改: $ sudo vi /etc/network/interfaces 在下面添加一行: dns-nameservers 8.8.8.8 8.8.4.4 然后,网上 ...
- C#打开摄像头抓取照片然后退出
using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; namespa ...
- LoadRunner AJAX TruClient协议Tips and Tricks
LoadRunner AJAX TruClient协议Tips and Trickshttp://automationqa.com/forum.php?mod=viewthread&tid=2 ...
- oracle 11g设置打开空表extent储存块
sql>alter system set deferred_segment_creation=false; sql>show parameter deferred_segment_crea ...
- GET到新技能,SharpCEF,C#和JS的互相调用
winform程序内嵌谷歌浏览器,使用大名鼎鼎的“SharpCEF”.这里科普一下: CEF是什么 CEF是Chromium Embedded Framework的缩写,是个基于Google Chro ...