2013-05-13 4 views
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 

내 실수 어디를? 루프 (당신이 구문 오류를 수정 후에도) 동시에에 두 개의 서로 다른 파일 에서 읽는 동안

+0

@MichaelGardner 같은 오류가 나는 오류 메시지가 다소 나를 놀라게 –

+2

tryed했지만, 두 그런데 것 같다 단 하나의 수행 및 완료. 그건 안돼. –

+1

당신은이'while' 문 및'do' /'done' 한 세트 만 있습니다. –

답변

0

건배 드라고,

두 가지를 사용할 수 없습니다. 이 스크립트는 제대로 공백이있는 파일 이름뿐만 아니라 호스트 이름과 공백이 포함 된 암호를 처리 할

#!/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에 $ INFO를 takeing되지 읽기에 나는 아무 응답이 더 이상 –

+0

완전히 사실 아니, 당신이 가질 수있는'에서 읽을 read' 필요하지 않습니다 해결 두 개의 다른 파일 설명자. –

+0

@Adrian Frühwirth : 사실, 당신이 '할 수있는 동안'... 자세히 && ... 읽을 수 있지만 당신은 명시 적으로이 시나리오에 대한 성가신 것 역시'while' 루프 전에 파일 디스크립터를 열어야 할 것입니다. 또는 두 개의 다른 설명자에서 더 빨리 읽을 수 있습니까? –