#1 Le 14/05/2020, à 16:57
- joe217
[Résolu] tester un paramètre dans un script
Bonjour,
j'aimerais tester si mon 2e paramètre donné lors de l'exécution du script est bien un opérateur (parmi + - * /).
if [[ "$2" -ne "+" || "$2" -ne"-" || "$2" -ne "*" || "$2" -ne "/" ]]
mais j'ai un problème avec cette ligne;
bad math expression:
operand expected at end of string
merci
Dernière modification par joe217 (Le 14/05/2020, à 18:39)
Hors ligne
#2 Le 14/05/2020, à 17:11
- pingouinux
Re : [Résolu] tester un paramètre dans un script
Bonjour,
if [[ "$2" == "+" || "$2" == "-" || "$2" == "*" || "$2" == "/" ]]
Hors ligne
#3 Le 14/05/2020, à 17:21
- joe217
Re : [Résolu] tester un paramètre dans un script
le probléme des que j’exécute mon script avec 1 + 2
je reçois opérateur inconnu. ?
merci
#!/bin/zsh
if [[ "$2" != "+" || "$2" != "-" || "$2" != "*" || "$2" != "/" ]]
then
echo "Opérateur inconnu."
else
((resultat = $1 $2 $3 ))
echo "$resultat "
fi
Hors ligne
#4 Le 14/05/2020, à 17:33
- pingouinux
Re : [Résolu] tester un paramètre dans un script
je reçois opérateur inconnu. ?
C'est normal, ton test est toujours vrai : il faut remplacer les || par des &&.
Hors ligne
#5 Le 14/05/2020, à 17:35
- nany
Re : [Résolu] tester un paramètre dans un script
Bonjour,
Il faut remplir TOUTES les conditions :
if [[ "$2" != "+" && "$2" != "-" && "$2" != "*" && "$2" != "/" ]]
Sinon l’une des condition (même trois) est forcément vraie et ton test sera toujours vrai lui aussi.
[edit]
Grillé.
[/edit]
Dernière modification par nany (Le 14/05/2020, à 17:37)
Hors ligne
#6 Le 14/05/2020, à 17:40
- Watael
Re : [Résolu] tester un paramètre dans un script
salut,
$ for operateur in '/' '*' '-' '+' 'm'; do case $operateur in [-/*+]) echo $(( 2 $operateur 5 ));; *) echo "opérateur inconnu";; esac; done
0
10
-3
7
opérateur inconnu
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 14/05/2020, à 17:48
- erresse
Re : [Résolu] tester un paramètre dans un script
Bonjour,
Lorsque tu testes si des conditions sont vraies, indépendamment les unes des autres, tu dois utiliser la relation "ou", mais si tu veux tester qu'elles ne sont PAS vraies, alors il faut utiliser la relation "et", car :
- si a = 1 ou 2 ou 3 ->je fais dès que l'une des conditions est vraie.
- si a # 1 et 2 et 3 -> je ne fais que si TOUTES les conditions sont fausses.
Si tu poses :
- si a # 1 ou 2 ou 3 -> je fais dès de que l'une des conditions est fausse, or quelle que soit la valeur, elle sera toujours fausse !
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#8 Le 14/05/2020, à 18:03
- MicP
Re : [Résolu] tester un paramètre dans un script
Bonjour
EDIT : Cette proposition ne convient pas à la demande => passez aux messages suivant.
En me basant sur ce qu'avait fait joe217 dans son message #3
#!/bin/bash
if [[ $2 =~ [\+\-/\*] ]]
then
resultat=$(( $1 $2 $3 ))
echo "$resultat"
else
echo "Opérateur inconnu."
fi
ou bien :
#!/bin/bash
[[ $2 =~ [\+\-/\*] ]] && echo $(( $1 $2 $3 )) || echo "Opérateur inconnu."
Dernière modification par MicP (Le 16/05/2020, à 07:46)
Hors ligne
#9 Le 14/05/2020, à 18:39
- joe217
Re : [Résolu] tester un paramètre dans un script
merci beaucoup j'ai compris
Hors ligne
#10 Le 14/05/2020, à 19:47
- kamaris
Re : [Résolu] tester un paramètre dans un script
On peut se contenter des motifs bash, sans échapper les caractères :
if [[ $2 == [+/*-] ]]; then …
Hors ligne
#11 Le 15/05/2020, à 13:20
- erresse
Re : [Résolu] tester un paramètre dans un script
Et j'ajouterais, utiliser comme le montre kamaris, le test d'égalité (==) de préférence à celui de contenu (=~) proposé par MicP car, si le paramètre contenait par erreur autre chose que le signe seul (=2 au lieu de = par exemple), alors le contrôle ne le détecterait pas...
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#12 Le 16/05/2020, à 07:44
- MicP
Re : [Résolu] tester un paramètre dans un script
Effectivement, ma proposition ne convenait pas.
J'ajoute un "Edit" dans mon message précédent.
Dernière modification par MicP (Le 16/05/2020, à 07:47)
Hors ligne