Příkaz pro čtení: Jak ověřit, že uživatel něco napsal

Pokouším se vytvořit příkaz if else k ověření, že uživatel něco zadal. Pokud má měl by běžet přes příkazy, a pokud ne, chci zopakovat prohlášení nápovědy.

Komentáře

  • S read, obvykle musí uživatel stisknout Enter dříve, než skript postoupí; poté můžete vstup otestovat …

Odpověď

Příklad (celkem snadný) je následující. Je vytvořen soubor s názvem userinput, který obsahuje následující kód.

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

Chcete-li se začít učit bash, doporučuji vám zkontrolovat následující odkaz http://mywiki.wooledge.org/

Odpověď

Pokud chcete vědět, zda uživatel zadal konkrétní řetězec, mohlo by vám to pomoci:

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

odpověď

Pokud je platných několik možností, proveďte podmínku while, aby odpovídala regulárnímu výrazu :

Například:

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

Bude vyžadovat zadání, dokud nezadá jednu ze tří možností.

Komentáře

  • Bylo by lepší použít příkaz select v bash, pokud by bylo problémem omezit výběr na sadu možnosti.
  • @Kusalananda, spíše než -1, uveďte skutečný příklad! Můj návrh funguje dobře. Ukažte, že i váš návrh je dobrý. Nedávejte ' jen -1, protože můžete – ' to ostatním čtenářům opravdu nepomůže.
  • Zde je ' příklad: select image in rhel74 rhel75 cirros35; do [ -n "$image" ] && break; done
  • @Kusalananda, toto je nyní velmi užitečné, díky! Také bych přidal [ -z "$image" ] && select ... k přeskočení celého výběru, pokud je již $ image nastaven.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *