歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下腳本實現交互輸入

Linux下腳本實現交互輸入

日期:2017/2/28 16:00:27   编辑:Linux教程

需要處理的問題是:

1、scp遠程拷貝每個源文件均需要輸入密碼。源文件是通過正則匹配的,scp支持,但每個文件或目錄需要手工輸入遠程機器的密碼,文件大的時候總不能守著吧

可選的解決方案是:打通ssh通道。但我只需要處理一次,原則上生產環境是不打通到開發環境的ssh通道的。事前事後都得聯系SA處理,麻煩

2、scp遠程拷貝目標目錄只能指定一個已存在的目錄,不支持動態生成。

比如:scp -r ./*/*c*/*2* [email protected]:/home/admin/yunti_compare,這是可以的,只是每次需要手動輸入密碼,如果我想將目標文件放到:/home/admin/yunti_compare/*,其中*對應源目錄的名字呢?搞不定。

最後,使用expect腳本實現交互。如下所示。

如果問題規模更復雜些,特別是文件備份,建議使用:rsync

##################### Linux下腳本實現交互輸入 #####################
#!/usr/bin/expect
set orgpath [lindex $argv 0 ]
set target [lindex $argv 1 ]
spawn ssh [email protected]
expect ".*password:"
send "log2011\n"
expect "].*"
send "mkdir -p $target\n"
expect "].*"
send "exit\n"
#interact
spawn scp -r $orgpath [email protected]:$target
expect ".*password:"
send "log2011\n"
expect eof
exit

#scp Hadoop1的按小時分析的結果文件,采樣獲取10點和22點文件到開發環境151.5
for buname in `du -sh /data/work/*/SqlldrDat/20111213/10 | awk -F '/' '{print $4}'`
do
#scp -r /data/work/*/SqlldrDat/20111213/10 [email protected]:/home/admin/yunti_compare/hadoop_20111213/*/10
#scp -r /data/work/*/SqlldrDat/20111213/22 [email protected]:/home/admin/yunti_compare/hadoop_20111213/*/22
./copy_log.expect "/data/work/$buname/SqlldrDat/20111213/10" "/home/admin/yunti_compare/hadoop_20111213/$buname"
./copy_log.expect "/data/work/$buname/SqlldrDat/20111213/22" "/home/admin/yunti_compare/hadoop_20111213/$buname"
done

#scp hadoop1的按天分析文件到開發環境151.5
for buname in AeCtr AuLog CnP4PClick EnP4P EnP4PClick EnWeb InnerClickstat InnerCtr InnerLog MytLog
do
target_dir="/home/admin/yunti_compare/hadoop_20111213/$buname""_day"
./copy_log.expect "/data/work/$buname/SqlldrDat/20111213" $target_dir
done
##################### Linux下腳本實現交互輸入舉例結束 #####################

Copyright © Linux教程網 All Rights Reserved