Läs kommando: Hur man verifierar att användaren har skrivit något

Jag försöker skapa ett if-annat uttalande för att verifiera att användaren har angett något. Om de har den ska gå igenom kommandona, och om inte vill jag upprepa ett hjälputtalande.

Kommentarer

  • Med read, vanligtvis måste användaren slå Enter innan skriptet fortskrider. Du kan sedan testa inmatningen …

Svar

Ett exempel (ganska enkelt) är som följer. En fil med namnet userinput skapas som innehåller följande kod.

#!/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 

För att börja lära dig bash rekommenderar jag dig att kontrollera följande länk http://mywiki.wooledge.org/

Svar

Om du vill veta om användaren har angett en specifik sträng kan det hjälpa:

#!/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 ... ... 

Svar

När flera val är giltiga, gör ett villkor för att matcha reguljärt uttryck :

Till exempel:

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

Den fortsätter att be om inmatning tills den anger ett av de tre alternativen.

Kommentarer

  • Det skulle vara bättre att använda ett select -uttalande i bash, om problemet var att begränsa valet till en uppsättning alternativ.
  • @Kusalananda, snarare än att ge -1, ge ett verkligt exempel! Mitt förslag fungerar bra. Visa att ditt förslag också är bra. Ge ' t bara -1 eftersom du kan – det ' är verkligen inte till hjälp för andra läsare.
  • Här är ' ett exempel: select image in rhel74 rhel75 cirros35; do [ -n "$image" ] && break; done
  • @Kusalananda nu är det här mycket hjälpsamt, tack! Jag skulle också ha lagt till [ -z "$image" ] && select ... för att hoppa över hela urvalet, om $ image redan är inställd.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *