Leesopdracht: Hoe verifieer ik dat de gebruiker iets heeft getypt

Ik probeer een if else-instructie te maken om te verifiëren dat de gebruiker iets heeft ingevoerd. het zou de commandos moeten doorlopen, en zo niet, dan wil ik een help-statement herhalen.

Opmerkingen

  • Met read, meestal moet de gebruiker op Enter drukken voordat het script vordert; je kunt dan de invoer testen …

Answer

Een voorbeeld (redelijk eenvoudig) is als volgt. Er wordt een bestand met de naam userinput gemaakt dat de volgende code bevat.

#!/bin/bash # create a variable to hold the input read -p "Please enter something: " userInput # Check if string is empty using -z. For more "help test" if [[ -z "$userInput" ]]; then printf "%s\n" "No input entered" exit 1 else # If userInput is not empty show what the user typed in and run ls -l printf "You entered %s " "$userInput" ls -l fi 

Om bash te leren, raad ik je aan de volgende link te controleren http://mywiki.wooledge.org/

Answer

Als je wilt weten of de gebruiker een specifieke string heeft ingevoerd, kan dit helpen:

#!/bin/bash while [[ $string != "string" ]] || [[ $string == "" ]] # While string is different or empty... do read -p "Enter string: " string # Ask the user to enter a string echo "Enter a valid string" # Ask the user to enter a valid string done command 1 # If the string is the correct one, execute the commands command 2 command 3 ... ... 

Antwoord

Als meerdere keuzes geldig zijn, maak dan een while-voorwaarde om overeen te komen met reguliere expressie :

Bijvoorbeeld:

#!/bin/bash while ! [[ "$image" =~ ^(rhel74|rhel75|cirros35)$ ]] do echo "Which image do you want to use: rhel74 / rhel75 / cirros35 ?" read -r image done 

Het zal om invoer blijven vragen, totdat een van de drie keuzes wordt ingevoerd.

Opmerkingen

  • Het zou beter zijn om een select -instructie te gebruiken in bash, als het probleem was om de keuze te beperken tot een set van opties.
  • @Kusalananda, in plaats van -1 te geven, geef een concreet voorbeeld! Mijn suggestie werkt goed. Laat zien dat uw suggestie ook goed is. Geef ' niet gewoon -1 omdat je kunt – het ' is echt niet nuttig voor andere lezers.
  • Hier ' is een voorbeeld: select image in rhel74 rhel75 cirros35; do [ -n "$image" ] && break; done
  • @Kusalananda nu is dit erg nuttig, bedankt! Ik zou ook [ -z "$image" ] && select ... hebben toegevoegd om de hele selectie over te slaan, als $ image al is ingesteld.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *