2013-05-13 103 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