Der mysql
Anruf befindet sich nicht in einer Schleife, daher wird er nur einmal aufgerufen, unabhängig davon, ob er erfolgreich ist oder nicht.
Sie können entweder sicherstellen, dass Sie $ret
am Ende von zurückkehren executeMySql
und es mit folgendem Befehl aufrufen:
while ! executeMySql ...; do :; done
oder Sie können ändern, executeMySql
so dass sich der mysql
Anruf in der vorhandenen Schleife befindet: -
function executeMySql() { while IFS= read -p "$prompt" -r -s -n 1 char do if [[ $char == $'\177' ]]; then prompt=$'\b \b' password="$" continue elif [[ $char == $'\0' ]]; then prompt='*' password+="$char" continue fi # Drop through when $char == $'\0' mysql -u root -p$password -e "$1" ret=$? if [ $ret = "0" ]; then # Show success message printf "\e[32m\nSUCCESS: $2\n\n" tput sgr0 return $ret else echo "Wrong password" fi done }
Ich habe den Code von Amts wegen geprüft, aber ich kann keinen Codetest durchführen, daher hoffe ich, dass ich ihn richtig geändert habe.
Sie könnten alternativ eine umschließende Schleife hinzufügen, ret=1; while $ret != 0 ...
innerhalb executeMySql
, die möglicherweise schwerfälliger, ist aber weniger Code - Änderungen benötigt.