2011-08-31 28 views
8

Debian sıkma sunucumdaki bir veritabanına karşı bazı işlemler yapmak için bir bash komut dosyası yazıyorum.bash check mysql connect

Kök için yanlış bir parola girersem, komut isteminin kapanacağını ve tekrar denemem istenmeyeceğini fark ettim. Bu çok uygun değil!

Bu nedenle, MYSQL'e bağlanmayı deneyen ve başarılı olması durumunda parolayı daha sonra kaydetmek için bir döngü oluşturmaya çalışıyordum.

Bunu denedim ama işe yaramıyor. Bunun yerine, bu hatayı alırsınız:

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

çok Bash komut dosyası deneyimli değilim
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 

, herhangi bir yardım harika olurdu!

+0

$ MYSQL nedir? –

+0

Bu, bir programlama sorusu olarak kabul edilmesine rağmen, serverfault.com'da daha iyi şansınız olabilir .. – Ben

+0

tam olarak ne referans göstermiyor (web üzerinde bulduğunuz), ama işe yarıyor! Bunun kafa karıştırıcı olduğunu itiraf ediyorum, sorumu düzenleyeceğim ve 'mysql' ile değiştireceğim. Teşekkürler! – Erwan

cevap

14

Bunun gibi yuvalanmış [[ -n backtic ... ]]; testine ihtiyacınız olduğunu düşünmüyorum. Deneyin:

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 bir kapanış ; do kadar herhangi bir komut grubu değerlendirir ve döngü yürütülür gerekip gerekmediğini belirlemek için son çalıştırılan komutun dönüş kodu denetler. Eğer bir başarısızlık aradığınız olduğundan, mantıksal NOT (!) ile testten önce zorunda VEYA mysql doğru çalıştığını kadar

siz aklınıza gelebilecek
until mysql -u root -p$mysqlRootPassword -e ";" ; do 
     read -p "Can't connect, please retry: " mysqlRootPassword 
done 

', tutmak, yani sözdizimsel eşdeğer kullanabilirsiniz Doğru şifreyi almaya çalışıyorum.

Maalesef, bir mysql yüklemesine erişimim yok, bu nedenle denenmemiş.

Umarım bu yardımcı olur.

+1

Teşekkürler dostum, işte bu! Ancak, bu mysql'e bağlanacak ve komut istemini gösterecektir. Bunu önlemek için, while while cümlesi: while! mysql -uroot -p $ mysqlRootPassword -e ";" ; – Erwan

+0

@Erwan'a yardım et, bu yardımcı oldu. İyileştirme sürecinizi dahil etmek için cevabımı düzenledim. Doğru anladım mı? Teşekkürler ve iyi şanslar. – shellter

+1

yop, mükemmel! Çok teşekkürler – Erwan