Jeg prøver at oprette en hvis ellers-sætning for at bekræfte, at brugeren har indtastet noget. Hvis de har det skal køre gennem kommandoerne, og hvis ikke, vil jeg gentage en hjælpeforklaring.
Kommentarer
Svar
Et eksempel (ret let) er som følger. Der oprettes en fil med navnet userinput, der indeholder følgende kode.
#!/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
For at begynde at lære bash anbefaler jeg dig at tjekke følgende link http://mywiki.wooledge.org/
Svar
Hvis du vil vide, om brugeren indtastede en bestemt streng, kan dette hjælpe:
#!/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 flere valg er gyldige, skal du stille et stykke tid for at matche regulært udtryk :
For eksempel:
#!/bin/bash while ! [[ "$image" =~ ^(rhel74|rhel75|cirros35)$ ]] do echo "Which image do you want to use: rhel74 / rhel75 / cirros35 ?" read -r image done
Det bliver ved med at bede om input, indtil det indtaster et af de tre valg.
Kommentarer
- Det ville være bedre at bruge en
select
udsagn ibash
, hvis problemet var at begrænse valget til et sæt valgmuligheder. - @Kusalananda, i stedet for at give -1, giver et faktisk eksempel! Mit forslag fungerer godt. Vis, at dit forslag også er godt. Giv ' t bare -1 fordi du kan – det ' er virkelig ikke nyttigt for andre læsere.
- Her er ' et eksempel:
select image in rhel74 rhel75 cirros35; do [ -n "$image" ] && break; done
- @Kusalananda nu er dette meget nyttigt, tak! Jeg ville også have tilføjet
[ -z "$image" ] && select ...
for at springe hele markeringen over, hvis $ image allerede er indstillet.
read
, typisk skal brugeren rammeEnter
før scriptet skrider frem; du kan derefter teste input …