2011-08-31 12 views
8

मैं अपने डेबियन निचोड़ सर्वर पर डेटाबेस के खिलाफ कुछ संचालन करने के लिए एक बैश स्क्रिप्ट लिख रहा हूं।बैश mysql कनेक्ट

मैंने देखा है कि अगर मैं रूट के लिए गलत पासवर्ड डालता हूं, तो प्रॉम्प्ट बंद हो जाएगा और मुझे फिर से प्रयास करने के लिए नहीं कहा जाएगा ... यह बहुत सुविधाजनक नहीं है!

तो मैं एक लूप बनाने की कोशिश कर रहा था जो MYSQL से कनेक्ट करने का प्रयास करता है और बाद में सफल होने पर पासवर्ड सहेजता है।

मैंने कोशिश की, लेकिन यह काम नहीं करता है। इसके बजाय, मैं यह त्रुटि प्राप्त:

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 

मैं बहुत बैश पटकथा में अनुभवी नहीं कर रहा हूँ, किसी भी मदद भयानक होगा!

+0

$ MYSQL क्या है? –

+0

सर्वरफॉल्ट.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 तक किसी भी कमांड समूह का मूल्यांकन करता है और पिछले निर्धारित करने के लिए करता है, तो पाश निष्पादित किया जाना चाहिए निष्पादित आदेश की वापसी कोड की जाँच करता है। आप देख रहे हैं क्योंकि एक विफलता के लिए, आप के साथ एक तार्किक नहीं (!) परीक्षा पूर्व में होना करने के लिए है या आप वाक्यात्मक बराबर उपयोग कर सकते हैं, यानी

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

जो आप के रूप में के बारे में सोच सकते हैं 'जब तक mysql सही ढंग से काम करता है, रखना सही पासवर्ड पाने की कोशिश कर रहा है '।

दुर्भाग्यवश, मेरे पास एक MySQL स्थापना तक पहुंच नहीं है, इसलिए यह अनचाहे है।

मुझे उम्मीद है कि इससे मदद मिलती है।

+1

धन्यवाद दोस्त, वह था! हालांकि, यह mysql से कनेक्ट होगा और इसके प्रॉम्प्ट को प्रदर्शित करेगा। इससे बचने के लिए, यहां कुछ वक्तव्य दिया गया है: जबकि! mysql -uroot -p $ mysqlRootPassword -e ";" ; – Erwan

+0

@Erwan, खुशी है कि मदद की। मैंने आपका सुधार शामिल करने के लिए अपना जवाब संपादित कर दिया है। क्या इसे मैंने ठीक तरह से लिया? धन्यवाद और शुभकामनाएँ। – shellter

+1

yop, यह सही है! धन्यवाद बहुत आदमी – Erwan

संबंधित मुद्दे