2013-05-13 106 views
0

我試圖製作一個腳本來連接MySQL。如何從2個文件中讀取

從一個文件讀取主機和另一個文件的MySQL密碼,但是我遇到了問題。

當我嘗試執行腳本它返回我這個錯誤:

./do: line 15: syntax error: unexpected end of file 

的代碼是這樣的:

#!/bin/bash 
FILE=$1 
INFO=$2 
cat $FILE | while read HOST; 
cat $INFO | while read INFO;do 
DBS=`mysql -u root -p $INFO -h $HOST --connect_timeout=4 -Bse'show databases' | wc -l` 
if [ "$DBS" -gt "0" ]; then 
echo $HOST - mysql - $DBS >> log.sql 
fi 
sleep 0.1 
done 

哪裏是我的錯?

+0

@MichaelGardner同樣的錯誤,我試過了 – 2013-05-13 14:03:30

+2

這個錯誤信息讓我有些驚訝,但你似乎有兩個時間,只有一個完成了。這是行不通的。 – 2013-05-13 14:04:01

+1

你有2個'while'語句,並且只有一套'do' /'done'。 – 2013-05-13 14:04:22

回答

0

薩呂DRAGOS,

不能使用兩個while循環(您解決語法錯誤,甚至之後),從兩個不同的文件同時讀取。

相反,你可以使用粘貼兩個文件首先將使用,然後執行你的循環:

#!/bin/bash 

hostnames="$1" 
passwords="$2" 

while IFS=$'\t' read host password; do 
    dbs=$(mysql -u root -p "$password" -h "$host" --connect_timeout=4 -Bse'show databases' | wc -l) 
    [ $dbs -gt 0 ] && echo "$host - mysql - $dbs" >> log.sql 
done <<<"$(paste "$hostnames" "$passwords")" 

這個腳本會正確處理與空格的文件名,以及主機名和包含空格的密碼。

+0

secound我解決了,不需要任何答覆 – 2013-05-13 15:16:10

+0

不完全正確,你可以讀''讀取兩個不同的文件描述符。 – 2013-05-13 15:20:20

+0

@AdrianFrühwirth:當然,你可以在'while read ...&read ...'的時候做',但是你必須在while循環之前明確地打開文件描述符,這對於這種情況來說看起來很麻煩。還是有更快的方法來讀取兩個不同的描述符? – 2013-05-13 17:14:34