Je veux juste insérer un nombre entre deux valeurs, sinon le script est répété jusqu'à ce que le nombre soit correct.
Ceci est mon script et il ne fonctionne pas correctement:
validation(){
read number
if [ $number -ge 2 && $number -ls 5 ]; then
echo "valid number"
break
else
echo "not valid number, try again"
fi
}
echo "insert number"
validation
echo "your number is" $number
Si vous utilisez Bash, il vaut mieux utiliser l'expression arithmétique, ((...))
, pour la lisibilité et la flexibilité:
if ((number >= 2 && number <= 5)); then
# your code
fi
Pour lire en boucle jusqu'à ce qu'un nombre valide soit entré:
#!/bin/bash
while :; do
read -p "Enter a number between 2 and 5: " number
[[ $number =~ ^[0-9]+$ ]] || { echo "Enter a valid number"; continue; }
if ((number >= 2 && number <= 5)); then
echo "valid number"
break
else
echo "number out of range, try again"
fi
done
((number >= 2 && number <= 5))
peut également être écrit en tant que ((2 <= number <= 5))
.
Voir également:
Votre déclaration if:
if [ $number -ge 2 && $number -ls 5 ]; then
devrait être:
if [ "$number" -ge 2 ] && [ "$number" -le 5 ]; then
Modifications effectuées:
ls
n'est pas un opérateur de comparaison valide, utilisez le
.&&
.Aussi, vous avez besoin d’un Shebang dans la première ligne de votre script: #!/usr/bin/env bash
2 changements nécessaires.
Proposé par Sergio.
if [ "$number" -ge 2 ] && [ "$number" -le 5 ]; then
Il n'y a pas besoin de break
. only meaningful in a for, while, or until loop
if [ $number -ge 2 && $number -ls 5 ]; then
devrait être
if [[ $number -ge 2 && $number -le 5 ]]; then
voir help [[
pour plus de détails