2016-09-19 1 views
0

Von einem Shell-Skript erforderlich sein, ich möchte den Benutzer zur Eingabe von Daten fragen, wie Datenbankname, Datenbankbenutzer usw.Wie Benutzer die Eingabe fragen, und das ist sollte

Wenn der Benutzer versehentlich die Enter-Taste drückt, Die Eingabe ist leer. Wie mache ich die Eingabe erforderlich? Wenn die Eingabe leer ist, stellt das Skript diese Frage erneut.

Mein aktuelles Skript, aber vielleicht funktioniert es nicht so, wie ich es erwartet hatte.

#!/bin/bash 
# Clear terminal first 
clear 

echo -n "Your Database Name : " 
read dbname 
if [ "$dbname" = "" ]; then 
    echo "ANSWER CANNOT BE BLANK!" 
    echo -n "Your Database Name : " 
    read dbname 
else 
... another code here 

Aber dies schließt nicht die Möglichkeit ausschließen, dass der Benutzer nicht versehentlich (oder vielleicht sogar absichtlich) drücken Sie die Enter-Taste –, wie viele, wenn sonst Bedingung muss ich machen?

Antwort

0

Gebrauch eine Schleife:

#!/bin/bash - 

clear 

echo -n "Your Database Name: " 

while read dbname; do 
    test "$dbname" != "" && break 
    echo "ANSWER CANNOT BE BLANK!" 
    echo -n "Your Database Name : " 
done 

echo "dbname = $dbname" 

Edit: fix für Ctrl-D

Der oben erwähnte Code verlässt eine leere Zeichenfolge, wenn der Benutzer Ctrl-D eintritt. Die folgende Version behandelt diesen Fall:

#!/bin/bash - 

clear 

until read -r -p "Your Database Name: " db && test "$db" != ""; do 
    continue 
done 

echo "db='$db'" 

Hinweis, verwenden wir die Bash read Befehl builtin. Wenn der Benutzer Ctrl-D (Handbuch Ende der Datei) eingibt, wird der Befehl read mit Status ungleich Null beendet, der als Fehler interpretiert wird. Siehe info bash 'read'.

Diese Version auch in nicht-interaktiven Modus arbeiten:

echo -e "\n name \n" | ./script.sh 
+0

Ok danke für deine Antwort: D + 1, ich versuche hehehe –

+0

Gebrochen: wenn Benutzer Strg-D drückt, haben Sie eine leere Variable 'dbname'. –

+0

@ gniourf_gniourf, ja. Es ist auch defekt, wenn Benutzer STRG-K drückt, dann Enter. Das ist nur eine einfache Antwort auf eine einfache Frage. Die Antwort mit "while true" funktioniert übrigens nicht im nicht-interaktiven Modus. Na und? Das OP passt die Schleife seinen Bedürfnissen an. –

1

Sie eine Endlos-Schleife verwenden und break wenn Eingabe nicht leer ist:

while true; do 
    echo -n "Your Database Name: " 
    read dbname 
    if [[ "$dbname" != "" ]] 
    then 
    echo "dbname = $dbname" 
    break 
    fi 
done 
+0

Oder noch besser: 'dbname =; bis [[$ Datenbankname]]; lese -rp "Dein Datenbankname:" dbname; erledigt; echo "Datenbankname = $ Datenbankname" '. –

Verwandte Themen