Comando di lettura: come verificare che lutente abbia digitato qualcosa

Sto cercando di creare unistruzione if else per verificare che lutente abbia inserito qualcosa. Se lo hanno dovrebbe eseguire i comandi e, in caso contrario, desidero visualizzare unistruzione di aiuto.

Commenti

  • Con read, in genere lutente deve premere Enter prima che lo script proceda; puoi quindi testare linput …

Risposta

Un esempio (abbastanza semplice) è il seguente. Viene creato un file denominato userinput che contiene il codice seguente.

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

Per iniziare a imparare bash, ti consiglio di controllare il seguente link http://mywiki.wooledge.org/

Risposta

Se vuoi sapere se lutente ha inserito una stringa specifica, questo potrebbe aiutare:

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

Risposta

Quando sono valide più scelte, crea una condizione while per trovare la corrispondenza con espressione regolare :

Ad esempio:

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

Continuerà a chiedere input, fino a quando non verrà inserita una delle tre scelte.

Commenti

  • Sarebbe meglio utilizzare unistruzione select in bash, se il problema fosse limitare la scelta a un insieme di opzioni.
  • @Kusalananda, invece di dare -1, fai un esempio reale! Il mio suggerimento funziona bene. Mostra che anche il tuo suggerimento è buono. Non ' dare -1 perché puoi – ' non è davvero utile per gli altri lettori.
  • Ecco ' un esempio: select image in rhel74 rhel75 cirros35; do [ -n "$image" ] && break; done
  • @Kusalananda ora è molto utile, grazie! Vorrei anche aggiungere [ -z "$image" ] && select ... per saltare lintera selezione, se $ image è già impostata.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *