#1 Le 11/05/2019, à 12:12
- AGPArchitecture
[RESOLU] simplification ecriture if
Bonjour à tous et toutes
je suis en train de faire un script et je me demandais si on pouvait simplifier une commande if qui n'a qu'une seule ligne et une seule condition.
voici la commande exemple
if [ -f "$arg" ]; then
Erreur 0 1 "$arg est un fichier ne peut pas être traité"
fi
Ne pourrais-ton pas simplifier l'écriture en une seule ligne? et est-ce conseillé?
Merci
Dernière modification par AGPArchitecture (Le 13/05/2019, à 18:29)
Hors ligne
#2 Le 11/05/2019, à 12:15
- pingouinux
Re : [RESOLU] simplification ecriture if
Bonjour,
if [ -f "$arg" ]; then Erreur 0 1 "$arg est un fichier ne peut pas être traité"; fi
ou
[ -f "$arg" ] && Erreur 0 1 "$arg est un fichier ne peut pas être traité"
Hors ligne
#3 Le 11/05/2019, à 12:20
- AGPArchitecture
Re : [RESOLU] simplification ecriture if
@pingouinux
[ -f "$arg" ] && Erreur 0 1 "$arg est un fichier ne peut pas être traité"
si je comprend bien :
le && execute ce qui suit si la condition est vérifiée.
et comment faire si on veut faire suivre ce qui suit dans le cas d'une vérification négative?
Hors ligne
#4 Le 11/05/2019, à 12:34
- pingouinux
Re : [RESOLU] simplification ecriture if
[ -f "$arg" ] && Erreur 0 1 "$arg est un fichier ne peut pas être traité" || echo "Pas d'erreur"
Hors ligne
#5 Le 11/05/2019, à 14:06
- nany
Re : [RESOLU] simplification ecriture if
Bonjour,
J’aimerais bien qu’on m’explique en quoi passer un bloc if/fi en une seule ligne simplifie un script.
Je trouve que, au contraire, ça rend la lecture (d’un point de vue humain) du script plus compliquée.
Et je ne pense pas que ça accélère quoi que ce soit.
Hors ligne
#6 Le 11/05/2019, à 17:30
- Sciensous
Re : [RESOLU] simplification ecriture if
nanny: ce que tu dis est vrai pour la commande seule; mais je suppose que dans un script un tantinet longuet ça peut être plus simple à relire (les autres lignes hein et pas le if/fi en question)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#7 Le 11/05/2019, à 18:27
- erresse
Re : [RESOLU] simplification ecriture if
Pour ma part, je serais assez de l'avis de nany sur ce coup, parce-que pour aérer le code et bien le structurer, il vaut mieux éclater les blocs d'instructions sur plusieurs lignes, avec indentations pour faciliter la lecture.
Lorsque les instructions sont compactes et non documentées, la maintenance est bien plus difficile...
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 11/05/2019, à 18:34
- Watael
Re : [RESOLU] simplification ecriture if
si, si.
au bout d'un certain nombre de lignes, enlever deux lignes à chaque condition simple est un avantage en terme de lecture.
pour faciliter la lecture de ces tests, j'utilise toujours la commande test :
test -f "$arg" && echo "condition remplie" || echo "échec condition"
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#9 Le 11/05/2019, à 18:59
- LeoMajor
Re : [RESOLU] simplification ecriture if
bonjour,
...alors, vous ne devez pas aimer ...
test -f "$chocolat"
if [ -f "$chocolat" -a -f "$cafe" ]; then ... # and
if [ -f "$chocolat" -o -f "$cafe" ]; then ... # or
a=10; echo $(( a>1 ? 3 : 5 )) # ---> 3
assignation par defaut de a si test chocolat ...
chocolat=3; a=${chocolat:-20}; echo "$a" # -->3
unset chocolat; a=${chocolat:-20}; echo "$a" # -->20
...
Hors ligne
#10 Le 12/05/2019, à 18:57
- nany
Re : [RESOLU] simplification ecriture if
si, si.
au bout d'un certain nombre de lignes, enlever deux lignes à chaque condition simple est un avantage en terme de lecture.pour faciliter la lecture de ces tests, j'utilise toujours la commande test :
test -f "$arg" && echo "condition remplie" || echo "échec condition"
Merci, je comprends ton point de vue et j’y adhère au final (même si je ne pense pas avoir un jour à faire de longs scripts).
bonjour,
...alors, vous ne devez pas aimer ...
test -f "$chocolat" if [ -f "$chocolat" -a -f "$cafe" ]; then ... # and if [ -f "$chocolat" -o -f "$cafe" ]; then ... # or a=10; echo $(( a>1 ? 3 : 5 )) # ---> 3 assignation par defaut de a si test chocolat ... chocolat=3; a=${chocolat:-20}; echo "$a" # -->3 unset chocolat; a=${chocolat:-20}; echo "$a" # -->20 ...
Là, en revanche, et même si je comprends ces quelques lignes somme toute assez simples, si on me donnais à lire un script de plus d’une centaine de lignes de la sorte, je crois que je finirais par avoir mal à la tête.
Hors ligne
#11 Le 13/05/2019, à 18:29
- AGPArchitecture
Re : [RESOLU] simplification ecriture if
Et bien je ne m'attendais pas à ce que ca s'enflamme.
Je prend bonne note que la simplification dépend un peu des personne.
moi c'était pour raccourcir un peu une fonction afin de pouvoir la garder complètement affiché sur l'écran
Hors ligne
#12 Le 14/05/2019, à 10:56
- erresse
Re : [RESOLU] simplification ecriture if
T'inquiète... On est loin d'une discussion enflammée ici !
Mais, effectivement, tout le monde n'est pas du même avis s'agissant de la bonne manière d'écrire un programme, et même une même personne peut rédiger de façon différente suivant le programme à écrire ou le langage utilisé, alors...
Le plus important, c'est d'abord que ça fonctionne, ensuite selon le cas, que ce soit plus facile à maintenir dans le temps, ou plus performant à l'exécution quitte à être plus obscur.
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
#13 Le 05/06/2019, à 18:25
- kamaris
Re : [RESOLU] simplification ecriture if
Comme j'aimais bien la formulation donnée par @pingouinux en #4, et même plus encore celle avec test donnée par @Watael en #8, je l'ai mise dans un script. L'excellent Shellcheck m'a alors signalé que cette formulation n'était pas équivalente à un if-then-else, car
Note that A && B || C is not if-then-else. C may run when A is true.
Voir, pour plus de détails, la page concernée sur le wiki de Shellcheck : SC2015.
Je ne sais pas si c'était évident pour les différents intervenants, en particulier @pingouinux et @Watael, mais comme ça ne m'avait pas sauté aux yeux, je le mentionne ici. Lorsqu'il n'y a en B (notation ci-dessus) qu'un echo, ou une commande dont on est à peu près sûr qu'elle renverra true, ça va ; mais sinon, on peut tout à fait avoir des surprises, surtout si en C on a un rm un peu méchant, ou quelque chose du genre…
Hors ligne
#14 Le 05/06/2019, à 18:34
- Watael
Re : [RESOLU] simplification ecriture if
[...]comme ça ne m'avait pas sauté aux yeux, je le mentionne ici.
tu fais bien.
je le suggérais en parlant de "condition simple", sans percevoir que cette subtilité pouvait échapper à quelqu'un de moins expérimenté.
mais, en effet, j'aurais dû alerter que condition && faux || autrechose exécute autrechose.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne