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

ドラゴシュに敬礼

2 つの while ループを (構文エラーを修正した後でも) 使用して、2 つの異なるファイルから同時に読み取ることはできません。

代わりに、最初に貼り付けを使用して 2 つのファイルを結合してから、ループを実行できます。

#!/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 に答える