2011-08-31 18 views
8

Piszę skrypt bash, aby wykonać pewne operacje na bazie danych na serwerze debianowym.bash check mysql connect

Zauważyłem, że jeśli wprowadzę złe hasło dla użytkownika root, monit zostanie zamknięty i nie będę proszony o ponowienie próby ... to nie jest bardzo wygodne!

Tak więc próbowałem utworzyć pętlę, która próbuje połączyć się z MySQL i zapisać hasło na później, jeśli się powiedzie.

Próbowałem tego, ale to nie działa. Zamiast tego, otrzymują ten błąd:

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

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 

nie jestem bardzo doświadczony w bash scripting, każda pomoc będzie niesamowite!

+0

co to jest $ MYSQL? –

+0

Możesz mieć więcej szczęścia na serverfault.com, mimo że jest to pytanie programistyczne. – Ben

+0

Nie dokładnie to, do czego się odnosi (znalazłem je w Internecie), ale działa dobrze! Przyznaję, że to jest mylące, zmienię moje pytanie i zastąpię je "mysql". Dzięki! – Erwan

Odpowiedz

14

Nie sądzę, żebyś musiał tak zagnieżdżony test [[ -n backtic ... ]];. Spróbuj:

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 ocenia każdą grupę poleceń zapisu do zamykanej ; do i sprawdza kod powrotu ostatniego wykonanego polecenia, aby określić, czy pętla powinna zostać wykonana. Ponieważ szukasz awarii, trzeba poprzedzić test z logiczną NOT (!) lub można użyć równowartość składniowej, czyli

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

których można myśleć jako „aż mysql działa poprawnie, należy próbuje uzyskać właściwe hasło ".

Niestety, nie mam dostępu do instalacji mysql, więc nie jest to testowane.

Mam nadzieję, że to pomoże.

+1

Dzięki stary, to było to! Jednak to połączy się z mysql i wyświetli monit. Aby tego uniknąć, oto instrukcja while: while! mysql -uroot -p $ mysqlRootPassword -e ";" ; do – Erwan

+0

@ Goodwan, cieszę się, że pomógł. Zmieniłem swoją odpowiedź, aby uwzględnić twoje usprawnienia. Czy dobrze to rozumiem? Dzięki i życzę powodzenia. – shellter

+1

yop, jest idealny! Wielkie dzięki człowieku – Erwan