2011-08-31 2 views
8

필자는 debian squeeze Server의 데이터베이스에 대해 일부 작업을 수행 할 수있는 bash 스크립트를 작성하고 있습니다.bash check mysql connect

루트에 대해 잘못된 암호를 입력하면 프롬프트가 닫히고 다시 시도하라는 메시지가 표시되지 않습니다. 매우 편리하지 않습니다.

그래서 MYSQL에 연결하고 성공하면 나중에 암호를 저장하려고하는 루프를 만들려고했습니다.

시도했지만 작동하지 않습니다. 대신,이 오류가 나타날 수

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

나는 매우 bash는 스크립트에서 경험하고 있지 않다
read -s -p "Enter MYSQL root password: " mysqlRootPassword 

while [[ -n `mysql -u root -p$mysqlRootPassword` ]]; do 
     read -p "Can't connect, please retry: " mysqlRootPassword 
done 

, 어떤 도움이 좋지 않을까!

+0

무엇이 $ MYSQL입니까? –

+0

프로그래밍 질문으로 간주 되더라도 serverfault.com에서 더 나은 행운을 누릴 수 있습니다. – Ben

+0

정확히 참조 된 내용 (웹에서 찾은 내용)이 정확하지 않지만 잘 작동합니다! 나는 이것이 혼란 스럽다는 것을 인정하고, 나의 질문을 편집하고 그것을 'mysql'으로 바꿀 것이다. 감사! – Erwan

답변

14

[[ -n backtic ... ]]; 테스트를 그렇게 중첩시켜야한다고 생각하지 않습니다. 보십시오

read -s -p "Enter MYSQL root password: " mysqlRootPassword 

while ! mysql -u root -p$mysqlRootPassword -e ";" ; do 
     read -p "Can't connect, please retry: " mysqlRootPassword 
done 

while 닫는 ; do 개까지 어떤 명령 그룹을 평가하고, 루프가 실행되어야하는지 결정하기 위해 실행 된 마지막 명령의 리턴 코드를 검사한다. 당신이 실패를 찾고 있기 때문에, 당신은 논리적 NOT (!)와 함께 테스트를 선행해야한다 또는 당신은 MySQL이 제대로 작동 할 때까지

당신이로 생각할 수
until mysql -u root -p$mysqlRootPassword -e ";" ; do 
     read -p "Can't connect, please retry: " mysqlRootPassword 
done 

'유지 즉, 구문 상당을 사용할 수 있습니다 올바른 암호를 얻으려고 애 쓰고있다.

불행히도, 나는 mysql 설치에 액세스 할 수 없으므로 이것은 테스트되지 않았습니다.

이 정보가 도움이되기를 바랍니다.

+1

고마워, 그게 다야! 그러나 이것은 mysql에 연결하여 프롬프트를 표시한다. 이를 피하기 위해 while 문이 있습니다. while! mysql -root -p $ mysqlRootPassword -e ";" ; do – Erwan

+0

@ 에르 완, 도움이 된 것을 기쁘게 생각합니다. 나는 당신의 개선을 포함하도록 나의 대답을 편집했다. 나는 그것을 올바르게 받았 느냐? 고마운 행운을 빕니다. – shellter

+1

요프, 완벽 해요! 고마워요 남자 – Erwan