2017-07-12 6 views
1

Ich unterrichte mich BashFehler in der Logik wahrscheinlich

Wie kann ich das funktionieren lassen?

Es gibt drei Checkpoints ... Keine Leerzeilen, keine Sonderzeichen und keine Zahlen, die kleiner als 1 und größer als die größte Zahl

jedoch am dritten Kontrollpunkt, wenn Sie versuchen, eine besondere eingeben Charakter, das Ganze fällt wie ein Kartenhaus zusammen.

Wie kann ich sicherstellen, dass der Benutzer keine Leerzeile, keine Sonderzeichen und keine Zahl kleiner als 1 und größer als eine vorgegebene größte Zahl eingibt?

lesen -p „Bitte geben Sie die Zeilennummer eingeben:“ line_number

# First checkpoint 
# No blank lines accepted as input 
while [[ -z "$line_number" ]] ; 
do 
echo 
echo "Line number can not be blank." 
echo 
read -p "Please enter a valid line number? " line_number 
echo 
done 

# Second checkpoint 
# No special characters allowed as input 
# Escaping the backtick or accent grave requires three back slashes before the backtick 
while [[ $line_number == *['!'@#\$%^\&*()_+?~-\"\\\`]* ]] ; 
do 
echo 
echo "No special characters allowed" 
echo 
read -p "Please enter a valid line number? " line_number 
echo 
done 

# Third checkpoint 
# No number less than 1 and greater than the $total_line_number 
while [[ $line_number -lt 1 || $line_number -gt $total_line_number ]] ; 
do 
echo 
echo -e "Line number can not be lesser than 1$ and bigger than    $total_line_number." 
echo 
read -p "Please enter a number between the 1 and $total_line_number scope? " line_number 
echo 
done 

Antwort

3

Wenn es angenommen hat, eine Zeilennummer sein, gibt es keine Notwendigkeit, zwischen „normalen“ Zeichen wie a und „speziellen“ Zeichen zu unterscheiden ist wie Interpunktion. Die einzige Sache, die Sie annehmen möchten, sind Ziffern:

line_number= 
until [[ $line_number = +([[:digit:]]) && 
     $line_number -ge 1 && 
     $line_number -le $total_line_number ]]; do 
    read -p "Please enter a valid number between 1 and $total_line_number: " line_number 
done 
+0

Ich möchte Bash-Skript erlernen und werden geübt. Ich versuche die Guides zu lesen, aber ich glaube nicht, dass ich das ohne deine Hilfe herausgefunden hätte. Und du warst nicht einmal herablassend. Kudos! Vielen Dank für Ihre Zeit und Ihr Fachwissen! – user8022637

+0

Ich denke, das erfordert 'shopt -s extglob' auch, oder? –

+0

Aktuelle Versionen (d. H. 4.1+) von 'bash' schalten' extglob' vorübergehend ein, während '' [[...]] ''Befehle ausgewertet werden. – chepner

Verwandte Themen