Il n'est pas nécessaire de parcourir le tableau en boucle pour vérifier si une valeur lui appartient. De plus, dans ce cas, j'utiliserais un appel récursif à une fonction plutôt qu'une autre boucle. Si je comprends bien, vous recherchez quelque chose comme ceci :
#!/bin/bash
array=( "one" "two" "three" "four" "five" )
function get_input() {
read -p "${1}: " number
if [[ " ${array[*]} " == *" ${number} "* ]]
then
echo 'true';
else
get_input 'Try again' # a recursive call of the function
fi
}
get_input 'Enter a number' # the initial call of the function
Avec la [[
test commande nous recherchons une correspondance exacte ==
entre une chaîne de caractères (côté gauche) et une expression régulière (côté droit).
-
L'expression " ${array[*]} "
développera notre tableau comme une chaîne de caractères, entourée de deux espaces, de sorte que chaque élément (même le premier et le dernier) seront entourés d'espaces. echo '^'" ${array[*]} "'$'
.
-
L'expression régulière *" ${number} "*
correspondra à toute chaîne composée de la valeur de la variable $number
entouré d'espaces, entouré d'autres caractères quelconques *
.
Nous pouvons effectuer ce test à l'aide d'autres outils tels que grep
(avec stdout supprimé) -q
et la recherche d'une correspondance exacte \<...\>
). Voici une version amusante :
#!/bin/bash
array=( "one" "two" "three" "four" "five" )
function get_input() {
read -p "${1}: " nm
echo "${array[*]}" | grep -q "\<${nm}\>" && echo 'true' || get_input 'Try again'
}
get_input "Enter a number"
Si nous voulons appeler le numéro correspondant à chaque élément du tableau tableau au lieu d'insérer des mots comme ''un'' ou ''deux'', que pouvons-nous faire ? que pouvons-nous faire ? par exemple : Entrez le nombre : 2
#!/bin/bash
array=( "one" "two" "three" "four" "five" )
# Get the lenght of the array
array_lenght="${#array[*]}"
function get_input() {
read -p "${1}: " number
# Test whether the variable $number has a value &and&
# test whether as integer this value is less or equal to the $array_lenght
if [[ ! -z ${number} ]] && (( number <= array_lenght && number > 0 ))
then
# Outpit the value of the cerain array element
# Note the first array element has number 0
echo "${array[$(( number - 1 ))]}"
else
get_input 'Try again'
fi
}
get_input 'Enter an integer number'