Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

joe217 #3 a écrit :

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)

En 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 !
tongue


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