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 26/02/2021, à 13:07

ar barzh paour

[Résolu] parenthèses et accolades

attention à l'utilisation de () et de {}

#!/bin/bash
    if [[ $1 -eq 0 ]]
        then (echo -n "OUI 0";exit 63;echo "A")
        else (echo -n "NON 0";exit 64;echo "B")
    fi
    # la suite est toujours exécutée !!!!!
    echo    "code de sortie du 1er if : $?" [b]# ajouté suite poste #4[/b]
    echo    " Paramètre reçu : $1 "  [b]# ajouté suite poste #2[/b]
    

    if [[ $1 -eq 1 ]]
        then { echo -n " c'est nul ";exit 65;echo "C";}
        else { echo -n " c'est nul ";exit 66;echo "D";}
    fi
    # mais cette suite n'est jamais exécutée
    echo "jamais exécutée" 

résultat avec 0  

bash ./essai.sh  0 ; echo $?
OUI 0 code de sortie du 1er if : 63  
Paramètre reçu : 0 
c'est nul 66

#    ==> exit 63 n'est pris en compte que dans les ( ) ( que dans le shell enfant )
#    ==> exit 66 est pris en compte hors de { } ( dans le shell courant )

#   résultat avec 1

bash ./essai.sh  1 ; echo $?
NON 0 code de sortie du 1er if : 64
Paramètre reçu : 1 
c'est nul 65

#    ==> exit 64 n'est pris en compte que dans les ( )  ( que dans le shell enfant )
#    ==> exit 65 est pris en compte hors de { }  ( dans le shell courant )

résultat avec 2

bash ./essai.sh  2 ; echo $?
NON 0 Paramètre reçu : 2 c'est nul 66

#    ==> exit 64 n'est pris en compte que dans les ( )  ( que dans le shell enfant )
#    ==> exit 66 est pris en compte hors de { }  ( dans le shell courant )

Dernière modification par ar barzh paour (Le 27/02/2021, à 11:57)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#2 Le 26/02/2021, à 13:25

Watael

Re : [Résolu] parenthèses et accolades

tu pourrais ajouter un echo $? sous le premier if
...

Dernière modification par Watael (Le 26/02/2021, à 13:25)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 26/02/2021, à 19:44

ar barzh paour

Re : [Résolu] parenthèses et accolades

c'est fait !


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#4 Le 26/02/2021, à 19:55

Watael

Re : [Résolu] parenthèses et accolades

heu, $1, ce n'est pas $?.
mon intention était de montrer que le code retour du exit est accessible. smile

Dernière modification par Watael (Le 26/02/2021, à 22:34)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 26/02/2021, à 22:24

Sciensous

Re : [Résolu] parenthèses et accolades

Il me semble qu'il manque des espaces avant les accolades de fermeture }


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#6 Le 26/02/2021, à 22:34

Watael

Re : [Résolu] parenthèses et accolades

non.
tel quel ça te provoque une erreur ?

Dernière modification par Watael (Le 26/02/2021, à 22:35)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 27/02/2021, à 11:37

ar barzh paour

Re : [Résolu] parenthèses et accolades

@Watael j'ai lu trop vite , je pensais que tu voulais juste afficher le paramètre reçu
je rajoute , c'est vrai que c'est intéressant
@sciencous
non
après {    espace obligatoire
avant }    espace non obligatoire  ( par contre ; obligatoire avant } )
mais c'est vrai que

then { echo -n " c'est nul " ; exit 65 ; echo "C" ; }

est plus agréable à lire que

then { echo -n " c'est nul ";exit 65;echo "C";}

ainsi que

then ( echo -n " c'est nul " ; exit 65 ; echo "C" )

est plus agréable à lire que

then (echo -n " c'est nul ";exit 65;echo "C")

et ça évite de se demander s'il faut espace ou pas

Dernière modification par ar barzh paour (Le 27/02/2021, à 12:06)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#8 Le 27/02/2021, à 12:48

Watael

Re : [Résolu] parenthèses et accolades

ça évite de se demander s'il faut ou pas

avec des raisonnements comme ça, on finit par mettre des accolades autour des Développements de variables, alors que c'est i nu ti leuuuuh!!!!!  lol
la simplicité, oui.
non au simplisme.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 27/02/2021, à 14:01

Hizoka

Re : [Résolu] parenthèses et accolades

Ah ah ah ! vive echo "${var}" !!!


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#10 Le 27/02/2021, à 14:12

Watael

Re : [Résolu] parenthèses et accolades

quitte à faire des choses inutiles avec des accolades :

echo "${var//$var/$var}"

roll

Dernière modification par Watael (Le 27/02/2021, à 14:12)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 27/02/2021, à 14:47

Hizoka

Re : [Résolu] parenthèses et accolades

Génial ! c'est ce que je vais faire par défaut maintenant !
la différence de temps de traitement est minime smile
J'ai hâte de poser des questions avec ce genre de code lol

Dernière modification par Hizoka (Le 27/02/2021, à 14:48)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#12 Le 27/02/2021, à 15:38

Tawal

Re : [Résolu] parenthèses et accolades

Watael a écrit :
echo "${var//$var/$var}"

Juste pour la compréhension, tu demandes de remplacer l’occurrence $Var par l’occurrence $var dans la variable var pour ensuite afficher le résultat de la substitution.
C'est bien ça ?


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#13 Le 27/02/2021, à 16:48

Watael

Re : [Résolu] parenthèses et accolades

je demande de remplacer le contenu de la variable par son propre contenu. c'est une blague. C'est totalement inutile.

il y a une posture, depuis quelques temps*, qui consiste à mettre des accolades lors des Développements de paramètres. C'est totalement inutile.

les accolades n'ont d'utilité que :
- pour les paramètres positionnels supérieurs à 9 : $9, ${10}...**
- lors d'une concaténation d'une variable avec du texte : echo "${var}Texte", sinon le shell va chercher une variable $varTexte, qui, au mieux, n'existe pas. sad
- lors d'un Remplacement de paramètre : echo "${var:1:3}", par exemple.
- pour les tableaux : printf '%s\n' "${tablo[@]}".

mais, pour afficher une variable, les accolades sont iiii nuuuu tiiii leuuuuh, yikes
il n'y a pas lieu d'utiliser une quelconque désambiguation.
smile

--
* c'est apparu avant l'épidémie de coronavirus.
** merci Tawal du rappel.

Dernière modification par Watael (Le 27/02/2021, à 22:40)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#14 Le 27/02/2021, à 17:00

ar barzh paour

Re : [Résolu] parenthèses et accolades

du coup je me demande bien à quoi peut servir l'exemple du post #1 lol lol lol
et comme je suis un peu feignant j'utilise plutôt

echo "${var/$var/$var}"

, ça me fait gagner un /

Dernière modification par ar barzh paour (Le 27/02/2021, à 17:04)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#15 Le 27/02/2021, à 17:51

Watael

Re : [Résolu] parenthèses et accolades

soit, mais là ça devient sensé. lol

Dernière modification par Watael (Le 27/02/2021, à 17:51)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#16 Le 27/02/2021, à 18:02

Tawal

Re : [Résolu] parenthèses et accolades

Watael au #13 a écrit :

mais, pour afficher une variable, les accolades sont iiii nuuuu tiiii leuuuuh, yikes
il n'y a pas lieu d'utiliser une quelconque désambiguïsation.

KISS comme tu dirais ...

Edit: Petit ajout d'accolades obligatoires :
Pour les paramètres de position supérieurs à 9 , on a donc
$0 $1 $2 .... $9 ${10} ${11} ...

Dernière modification par Tawal (Le 27/02/2021, à 19:22)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#17 Le 27/02/2021, à 19:35

Sciensous

Re : [Résolu] parenthèses et accolades

ok pour l'espace smile

les {} sont aussi utiles pour les variables avec certains caractères comme des _


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#18 Le 27/02/2021, à 19:45

Watael

Re : [Résolu] parenthèses et accolades

Sciensous a écrit :

les {} sont aussi utiles pour les variables avec certains caractères comme des _

oui, c'est une concaténation avec du texte (i.e. tous les caractères valides dans un nom de variable).


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#19 Le 27/02/2021, à 21:54

Hizoka

Re : [Résolu] parenthèses et accolades

Ca commence à faire beaucoup de cas... je dis ça... lol


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#20 Le 27/02/2021, à 22:01

Watael

Re : [Résolu] parenthèses et accolades

Tawal a écrit :

Pour les paramètres de position supérieurs à 9 , on a donc
$0 $1 $2 .... $9 ${10} ${11} ...

bien vu, j'édite, et j'ajoute à la liste.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#21 Le 27/02/2021, à 22:27

Tawal

Re : [Résolu] parenthèses et accolades

Et je rajouterais aussi qu'elles sont OBLIGATOIRES entre amis lol


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#22 Le 27/02/2021, à 22:35

MicP

Re : [Résolu] parenthèses et accolades

Bonjour

Il y a aussi le cas où on voudrait
extraire une partie d'une chaîne qui est dans une variable :

michel@xubu:~$ maVar="/mon/chemin vers/mon.fichier.ext"
michel@xubu:~$ echo ${maVar%/*}
/mon/chemin vers
michel@xubu:~$ echo ${maVar##*/}
mon.fichier.ext
michel@xubu:~$ echo ${maVar##*.}
ext
michel@xubu:~$ 

et celui où on voudrait substituer une chaîne de caractères par une autre
dans la valeur d'une variable :

michel@xubu:~$ maVar="ils avaient dit qu'ils venaient"
michel@xubu:~$ echo ${maVar//il/elle}
elles avaient dit qu'elles venaient
michel@xubu:~$ 

Dernière modification par MicP (Le 27/02/2021, à 22:43)

Hors ligne

#23 Le 27/02/2021, à 22:38

Watael

Re : [Résolu] parenthèses et accolades

ça fait partie des Remplacements de paramètres.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#24 Le 27/02/2021, à 22:45

MicP

Re : [Résolu] parenthèses et accolades

Ok, je ne savais pas.
Merci pour l'info smile

Hors ligne

#25 Le 27/02/2021, à 23:29

Hizoka

Re : [Résolu] parenthèses et accolades

Il y a également :

a=1
b=a
echo ${!b}
# 1

et aussi :

a=test
echo ${#a}
# 4

Dernière modification par Hizoka (Le 27/02/2021, à 23:30)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne