Estoy tratando de crear una declaración if else para verificar que el usuario haya ingresado algo. Si lo ha hecho debe ejecutarse a través de los comandos, y si no, quiero repetir una declaración de ayuda.
Comentarios
Respuesta
Un ejemplo (bastante fácil) es el siguiente. Se crea un archivo llamado userinput que contiene el siguiente código.
#!/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
Para empezar a aprender bash, te recomiendo que consultes el siguiente enlace http://mywiki.wooledge.org/
Respuesta
Si desea saber si el usuario ingresó una cadena específica, esto podría ayudar:
#!/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 ... ...
Responder
Cuando varias opciones sean válidas, establezca una condición while para que coincida con expresión regular :
Por ejemplo:
#!/bin/bash while ! [[ "$image" =~ ^(rhel74|rhel75|cirros35)$ ]] do echo "Which image do you want to use: rhel74 / rhel75 / cirros35 ?" read -r image done
Seguirá solicitando información, hasta que ingrese una de las tres opciones.
Comentarios
- Sería mejor usar una
select
declaración enbash
, si el problema fuera restringir la elección a un conjunto de opciones. - @Kusalananda, en lugar de dar -1, ¡da un ejemplo real! Mi sugerencia funciona bien. Demuestre que su sugerencia también es buena. No ' solo dé -1 porque puede: ' no es realmente útil para otros lectores.
- Aquí ' es un ejemplo:
select image in rhel74 rhel75 cirros35; do [ -n "$image" ] && break; done
- @Kusalananda ahora esto es muy útil, ¡gracias! También habría agregado
[ -z "$image" ] && select ...
para omitir toda la selección, si $ image ya está configurado.
read
, normalmente el usuario tiene que presionarEnter
antes de que el script progrese; luego puede probar la entrada …