如何从2个文件中读取

时间:2013-05-13 13:58:31

标签: bash

我尝试制作一个脚本来连接MySQL。

从一个文件读取主机,从另一个文件读取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

我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

SalutDragoş,

您不能使用两个while循环(即使在修复语法错误后)同时从两个不同的文件中读取

相反,您可以先使用 paste 组合这两个文件,然后执行循环:

#!/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")"

此脚本将正确处理带空格的文件名,以及包含空格的主机名和密码。