0

我尝试制作一个脚本来连接 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

我的错误在哪里?

4

1 回答 1

0

向德拉戈斯致敬,

您不能使用两个 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")"

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

于 2013-05-13T14:26:34.510 回答