expect介紹
expect
是由Don Libes
基于Tcl
( Tool Command Language
)語言開發(fā)的虐急,主 要應(yīng)用于自動化交互式操作的場景箱残,借助Expect處理交互的命令,可以將交互過程如:ssh
登錄止吁,ftp
登錄等寫在一個腳本上被辑,使之自動化完成。尤其適用于需要對多臺服務(wù)器執(zhí)行相同操作的環(huán)境中敬惦,可以大大提高系統(tǒng)管理人員的工作效率
expect
語法:
expect
[選項
] [ -c
cmds
] [ [ -[f
|b
] ] cmdfile
] [ args
]
選項
-c
:從命令行執(zhí)行expect
腳本盼理,默認expect
是交互地執(zhí)行的
示例:expect -c expect "\n" {send "pressed enter\n"} '
-d
:可以輸出輸出調(diào)試信息
示例:expect -d ssh.exp
expect
中相關(guān)命令
spawn
:啟動新的進程
send
:用于向進程發(fā)送字符串
expect
:從進程接收字符串
interact
:允許用戶交互
exp_continue
: 匹配多個字符串在執(zhí)行動作后加此命令
awk介紹
報告生成器,格式化文本輸出
處理機制類似sed
命令,自帶循環(huán)處理 讀入一行處理一行然后自動讀取下一行再進行處理
sed
命令換行的標識是固定的,只能是回車換行. awk
里面的換行符是可以自定義的.awk
自動把讀入的行按照指定的切割符號切割成若干個字段 默認的切割符號是空白符號(包括連續(xù)的空白符號,tab
鍵,回車換行符).
下面是downloadFile.sh
OLD=$IFS
IFS=$'\n'
# IFS作為分隔標識 、 循環(huán)讀取fileData.txt每行內(nèi)容
for line in `cat fileData.txt`
do
if [ "$line" = "" ]
then
continue;
fi
#獲取第一列的參數(shù) 默認 空格分隔 $line
scp=$(echo $line | awk '{print $1}')
origin=$(echo $line | awk '{print $2}')
dest=$(echo $line | awk '{print $3}')
# / 作為分隔符 取最后一列
fileId=$(echo $origin|awk -F '/' '{print $NF}')
echo $fileId
#判斷 $dest 這個文件夾是否存在存在則忽略否則創(chuàng)建
if [ ! -d "$dest" ];then
mkdir -p $dest
else
echo "文件夾存在"
fi
localFile=$dest$fileId
echo $localFile
#判斷文件是或否存在
if [ -f "$localFile" ];then
echo "文件存在"
continue
fi
echo $line
expect expectscp.sh $scp $origin $dest
done
下面是expectscp.sh
#!/usr/bin/expect -f
#參數(shù)1
set comand [lindex $argv 0]
#參數(shù)2
set ori [lindex $argv 1]
#參數(shù)3
set des [lindex $argv 2]
#expect 執(zhí)行shell命令 這里不用加set timeout 直接等待命令執(zhí)行完成
#默認timeout 30s
spawn $comand $ori $des
expect { "yes/no"
{send "yes\r";exp_continue}
}
#需要自己修改
expect "root@host's password:"
#需要自己修改
send "密碼\r"
expect "*100%*"
expect eof
fileData.txt
格式
scp root@host:2017/2017-11-06/01h8b4pDJ099PK6wfrHTM15.png 2017/2017-11-06/
scp root@host:2017/2017-11-06/0ueJjUOZVcGWoUeMgMRTCKw.png 2017/2017-11-06/
scp root@host:2017/2017-11-06/005048zL9aDWRAQRm1ZgRmgR.png 2017/2017-11-06/
scp root@host:2017/2017-11-06/0tIJzZHld7Trwd0prxHwkJ.png 2017/2017-11-06/
這些數(shù)據(jù) 是存在數(shù)據(jù)庫的俄删,我是用過sql將其組裝成這種格式的宏怔。
最后給chmod u+x downloadFile.sh expectscp.sh
增加可執(zhí)行權(quán)限
./downloadFile.sh
就能自動將遠端程序文件復(fù)制到本地指定文件夾了