Script bash : question

Oui, ça me revient, le ‘!’ c’est la négation.
Et du coup, c’est beaucoup plus clair avec le ‘!=’, en effet.
Je suis sottttttttttttttttttttt !

[quote]Fait ausi attention :
dans test (alias [) = et != sont pour comparer les chaines de caractère,
pour les comparaisons arithmétiques c’est -eq, -ne, -gt etc…[/quote]

oui, ça je l’ai vu et j’ai retenu (enfin j’espère :unamused: )

Peut-on donner deux réponses possibles à une variable de texte :question:

#!/bin/bash

moi=ricardo OU Ricardo

Pas bien compris ?

moi=ricardo
Moi=Ricardo
MOI=RICARDO

=$moi or …

Je crois que j’ai compris. Ça dépend de ton usage mais tu peut faire ça :

var=salut if echo $test | grep -iq "^$var$"; then echo "Ça match" fi
Si c’est pour tester ta variable.

Re,

[quote]# set PATH so it includes user’s private bin if it exists
if [ -d “$HOME/bin” ] ; then
PATH="$HOME/bin:$PATH"
fi
[/quote]

Ceci est dans le .profile de Ricardo et s’il n’est pas commenté ton path est complété

S’il a choisi de tout mettre dans ~/bin oui s’il a préféré autre chose.

Oui, j’ai choisi ~/bin pour y loger mes futurs exploits et après la commande donnée par Mister, je suis bien dans le PATH, donc prog.sh démarre directement.
Pour en revenir à ma question précédente, j’ai dû mal m’exprimer voici donc un exemple plus complet :

[code]#!/bin/bash

moi=ricardo # définition d’une variable texte

read -p "entrez votre nom : " nom
if [$nom = $moi ]; then
echo "blabla"
else
etc.[/code]

Je sais que l’on peut faire autrement et plus simplement mais je voudrais quand même savoir s’il est possible, au lieu de n’avoir qu’un seul choix (ricardo), d’en avoir plusieurs pour la MÊME variable : $moi

Donc, shématiquement :
moi=ricardo ou RICARDO ou Ricardo
et qui si on entre un de ces trois noms, ça “passe”

Hem, sauf si ta variable est une liste à ce moment là tu fais:

#!/bin/bash

moi=( ricardo RICARDO Ricardo )    # définition d'une liste de plusieurs valeurs
   
read -p "entrez votre nom : " nom
for $test in $moi; do
   if [ $test == $nom ];then
      echo "blabla"
   else
      echo "other"
   fi
done

sinon tu ne peux pas.
Il y a encore une autre solution:

#!/bin/bash

   read -p "entrez votre nom : " nom
      if [ $nom = Ricardo || $nom = RICARDO || $nom = ricardo ]; then
         echo "blabla"
      else
         echo "other"
      fi

Bonjour,

Sinon toutes les variables que tu lis depuis les shell, tu les passes en minuscule si tu as initialisé tes variables en minuscules :

[code]#!/bin/bash

moi=ricardo # définition d’une variable texte

read -p "entrez votre nom : " nom
nom=$(printf $nom | tr ‘[A-Z]’ ‘[a-z]’)
if [ $nom = $moi ]; then
echo "blabla"
else
etc.
fi[/code]

Sinon, j’ai trouvé une page avec pas mal d’exemples d’utilisations de tableauxen bash biensûr: tldp.org/LDP/abs/html/arrays.html

et une tableau récapitulatif des opérateurs en bash: laboiteaprog.com/article-79- … conditions

[quote=“L0u!$”]

[code]
#!/bin/bash

read -p "entrez votre nom : " nom
if [ $nom = Ricardo || $nom = RICARDO || $nom = ricardo ]; then
echo "blabla"
else
echo "other"
fi
[/code][/quote]

On peut aussi utiliser un ‘case’ dans ces conditions :

read -p "entrez votre nom : " nom case "$nom" in Ricardo|RICARDO|ricardo) echo "blabla" ;; *) echo "other";; esac

Au passage je rappelle qu’il faut être très vigilant à l’expansion de variable shell quand il y a des espaces,
et mettre “$VAR” à la place de $VAR est souvent une bonne idée :wink:.

[code]#!/bin/bash

read -p "entrez votre nom : " nom
if echo $nom | grep -iq “^ricardo$”; then
echo "blabla"
else
echo "other"
fi[/code]
Et là tu n’a aucun problème de casse tout est géré.

Salut,

Ce que je trouve pénible dans ce langage c’est le nombre de solutions possibles sans que je puisse déterminer quelle est la plus performante :angry:

[quote=“MisterFreez”][code]#!/bin/bash

read -p "entrez votre nom : " nom
if echo $nom | grep -iq “^ricardo$”; then
echo "blabla"
else
echo "other"
fi[/code]
Et là tu n’a aucun problème de casse tout est géré.[/quote]

Celle-là, je la retiens, ça me semble être la plus pratique dans ce genre d’erreurs possibles.
Je vais la tester. J’ai fait comme Gérard le préconise, un prog “essai.sh”, sur mon autre machine, c’est pratique car le fichier est déjà présent et exécutable.
Ce n’est pas que je fasse un prog mais je me renseigne quand je pense à quelque chose pour essayer de m’en souvenir, le moment venu :smt002

Ok, ça fonctionne super :smt003
Explications :
-iq :question:
^ :question:

[quote=“ricardo”]Ok, ça fonctionne super :smt003
Explications :
-iq :question:
^ :question:

Le ^ et $ désignent le début et la fin de la ligne, ce sont des expressions régulières "regex"
http://www.shellunix.com/regexp.html

Le i du grep signifie qu’on ne fait pas de différence quant à la casse de caractères mais le q :unamused:

Bonjour,

man grep :

[quote]-q, --quiet, --silent
Ne pas afficher les résultats normaux. Sortir immédiatement avec un code de retour égal à zéro dès qu’une concordance est trouvée, même si une erreur est détectée. Voyez aussi l’option -s ou --no-messages. (-q est spécifiée dans POSIX)[/quote]

[quote=“ricardo”]Ok, ça fonctionne super :smt003
Explications :
-iq :question:
^ :question:

i comme ignore et q comme tais-toi (t’as eu peur)

^ du début à $ la fin

De toute la ligne ou de ce qui est compris entre les guillemets :confused:
Bien, le lien, un de plus dans la boîte :smt003