我尝试制作一个脚本来连接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
我的错误在哪里?
答案 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")"
此脚本将正确处理带空格的文件名,以及包含空格的主机名和密码。