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
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 ibash
, 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.
read
, vanligtvis måste användaren slåEnter
innan skriptet fortskrider. Du kan sedan testa inmatningen …