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

 

至此,完成了我們的設定目標。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM