Salut,
Je n'en serais pas si sûr…
Ce qui est vrai pour les guillemets, l'est tout autant pour les accolades
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $ fleur="rose" $ echo "une $fleur des $fleurs" une rose des $ echo "une ${fleur} des ${fleur}s" une rose des roses![]()
Nouvelle version :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 #!/bin/bash # -e : Interruption immédiate qd erreur # -u : Interdit le référencement des variables non définies # -o : # -pipefail : Pour que le code de statut soit cohérent avec l'erreur set -euo -pipefail # Internal Field Separator IFS=$'\n\t' # Script vars readonly actiondir="/etc/cron-apt/action.d" readonly preferencesfile="/etc/cron-apt/config.d/preferences" readonly configfile="/etc/cron-apt/config" # Menage echo "Suppression des anciennes configurations" find -0 "${actiondir}" -type f | xargs rm -f if [ -f "${preferencesfile}" ]; then rm -f "${preferencesfile}" ; fi # Debut du programme echo "Merci de specifier le type de profile à installer (full / security)" read profile # En fonction du profil choisi, on applique telle ou telle conf case "${profile}" in "full") echo "Creation de la regle full" # Creation de la règle full echo "autoclean -y" > "${actiondir}/0-FullProfile" echo "dist-upgrade -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold -o APT::Get::Show-Upgraded=true" >> "${actiondir}/0-FullProfile" echo "autoremove --purge" >> "${actiondir}/0-FullProfile" echo "Update du fichier config pour prendre en compte le ACTIONDIR" # Modification du fichier config pour prise en compte de ce param ;; "security") echo "Blocage des paquets kernel tagues *linux-image*" # On bloque les packages kernel pour pas les upgrade echo "Package: dovecot* galera* glusterfs* haproxy* heartbeat* libc6* mariadb* mysql* postfix* proxmox* pve-* qemu-* linux-headers* linux-image* linux-libc*" > "${preferencesfile}" echo "Pin: release *" >> "${preferencesfile}" echo "Pin-Priority: -1" >> "${preferencesfile}" echo "Creation de la source list dediee securite" grep -i security /etc/apt/sources.list > /etc/apt/sources.list.d/security.sources.list echo "Menage dans /etc/apt/sources.list" sed -i "/security/d" /etc/apt/sources.list echo "Creation de la regle security" # Creation de la règle security echo "autoclean -y" > "${actiondir}/0-SecurityProfile" echo "upgrade -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold -o APT::Get::Show-Upgraded=true -o Dir::Etc::SourceList=/etc/apt/security.sources.list" >> "${actiondir}/0-SecurityProfile" echo "upgrade -y telegraf grafana" >> "${actiondir}/0-SecurityProfile" echo "autoremove --purge" >> "${actiondir}/0-SecurityProfile" ;; *) echo "Parametre incorrect, vous devez entrer soit full soit security" exit 1 ;; esac # Configuration globale # Ajout d'apt en commande de reference # Ajout des preferences d envoi de mail echo "PTCOMMAND=/usr/bin/apt MAILTO=\"***\" MAILON=\"upgrade\" RUNSLEEP=600" > "${configfile}"
je sais que tu voudrais qu'on mette des accolades tout le temps; je le lis sur tous les forums auxquels tu participes.Envoyé par zipe31
c'est stupide.
les accolades sont inutiles quand elles n'ont pas de signification.
Or,
hors "concaténation" (comme tu en fais l'exemple : la variable $fleurs n'existe pas),
hors "modification" de la valeur de la variable (${var:1:2}, par exemple), et
hors tableau,
elles ne servent à rien, voire nuisent à la lisibilité du script.
les accolades ont une fonction, et ne sont utiles QUE dans le cadre de cette fonction.
c'est porter des lunettes de soleil dans le métro.
un flic, au milieu d'un carrefour, doit faire deux gestes :
- arrêtez
- avancez
le reste est inutile, et nuit à la lisibilité de ses instructions.
---
quand tu fais une substitution avec sed, tu ne protèges pas des caractères qui n'ont pas de signification spéciale !
--
les accolades, c'est pareil.
et si tu as besoin de béquilles pour coder, tu n'es peut-être pas le mieux à même de donner des conseils.
Donc en gros, t'es le seul habilité à prodiguer des conseils ?
Tu as la science infuse et les autres sont des gros nazes (pour rester poli) ?
Ah, au fait, les flics au carrefour, c'était au siècle dernier.
Quant aux béquilles pour coder, si elles me servent et que j'en parle, ça peut aussi aider d'autres personnes. Les handicapés du code ont aussi le droit de coder et de s'appuyer où bon leur semble, n'en déplaise aux êtres supérieurs !
Eh les gars, détendez-vous
Vous êtes sympa de m'aider à faire un beau script et ça m'ennuie que vous vous écharpiez sur mon post
Sur le fond :
Il semble que google ait publié un recueil des bonnes pratiques (lien retrouvé sur mon fameux linux magazine) et qu'il préfère la notation avec guillemet+accolade (https://google.github.io/styleguide/...able-expansion).
Et moi, je dois dire que ça me convient bien.
Il faut faire la distinction entre les habitudes et les bonnes pratiques.
Et pour ma part, je pense qu'un code non rédigé dans un contexte particulier (celui d'une boîte avec un existant/historique) doit être aussi générique que possible afin de faciliter sa compréhension par des "nouveaux".
D'ailleurs dans ce même guide on lit "Stay consistent with what you find for existing code".
Qui illustre bien mon propos je pense.
Bon sinon, pour en revenir au script, pour le faire aux p'tits oignons, que modifier ?
Rien d'inutile ?
Il me faut un script tip top qui me servira de base à tous les suivants.
Et quand on commence mal, ça finit rarement bien![]()
imagine que cet article ait été rédigé par des gens comme toi... des personnes moins expérimentées,Authored, revised and maintained by many Googlers.
ou pire, par zipe31 !
c'est inutile.
utiliser une chose inutile est irrationnel.
l'irrationnel relève de la psychopathologie.
tout ce qu'on trouve sur le réseau n'est pas vrai.
le nombre ne fait pas la vérité.
un article promu par une entreprise qui trouve normal de t'espionner et de revendre tes données personnelles... :/
je considère que ce type de comportement est caractéristique d'une volonté (consciente ou non) d'un nivellement par le bas, au lieu d'élever le niveau.
eh oui ! « le saut à l'élastique avec un élastique, c'est pour les tapettes. »* (captain sportextreme, in Hero Corp)
--
* je ne retrouve pas la citation exacte.
N_BaH, tu as le droit de critiquer gg pour ses pratiques.
Personnellement, j'évite autant que possible leurs services.
Pour autant, techniquement, ils n'ont pas de leçon à recevoir.
Gg est quand même rarement en vrac.
Et s'ils mettent leurs quitus sur un recueil de "many googlers", je pense que ça a une certaine valeur.
Si c'est repris pour linux magazine, pareil, ça entérine quand même le sérieux du truc.
Rédigé par Romain Pelisse qui écrit pour LM depuis plus de 10 ans, qui ne semble pas être le dernier des glands.
Après, si tu veux faire autrement, tu fais comme tu veux.
Mais pour le néophyte que je suis, partir sur un code bien clair, c'est mieux.
il y a des gens très compétents dans leur domaine qui sont pourtant des quiches en shell script.
vous ne m'enlèverez pas de l'idée que ajouter systématiquement des accolades quand il n'y en a pas l'utilité, c'est inutile, au moins.
et je ne cesserai pas de le dire.
si vous voulez de l'aide visuelle, utilisez un éditeur avec coloration syntaxique !
L'un des intérêts de mettre systématiquement les accolades, c'est de pouvoir faciliter le parsing de script pour des modifications ou autre...
Pour moi, on ne peut pas réécrire le passer, mais autant faire profiter les nouveaux en leur conseillant ce qui est le mieux, même s'il n'y a pas d'obligations...
Comme les ls dans les scripts ou ne pas obligatoirement encadrer sa variable de guillemets: pour les 2 cas, il y a une exception où l'on peut le faire![]()
je l'ai dit plus haut : il y a des cas pour lesquels les accolades sont indispensables, et je trouve ça très bien d'attirer l'attention sur ces cas précis :
{ Attention ! il se passe quelque chose "d'inhabituel" avec la variable }
c'est le côté systématique, voire aveugle ( "je ne sais pas trop, alors j'en mets tout le temps" -> "j'en mets tout le temps, comme ça j'ai pas besoin d'apprendre"), que je trouve ne pas donner cette mesure.
et plus encore que l'emploi (« chacun fait...ce qui lui plaît... »), c'est la recommandation de cette pratique.
je le redis : utiliser une chose inutile est inepte, au moins.
Ca nous éloigne de plus en plus du sujet de ce post !
Des évolutions sur la forme ? Constantes en lieu et place des variables en haut du script par exemple ?
Des évolutions sur le fond ? N'y a t-il rien a supprimer ? Pour vous, ce script est-il fonctionnel ?
Il y a une petite erreur de compréhension sur la commande set:
active l'option
Code : Sélectionner tout - Visualiser dans une fenêtre à part set -o pipefail
désactive l'option
Code : Sélectionner tout - Visualiser dans une fenêtre à part set +o pipefail
Sinon, un détail, tu modifies l'IFS mais tu ne le sauvegarde pas avant pour pouvoir le restaurer par la suite.
D'ailleurs, pourquoi le modifies tu ?
Je veux activer l'option pipefail (ce qui semble être un comportement plus normal que sans), et donc je fais :
pour activer
Code : Sélectionner tout - Visualiser dans une fenêtre à part set -o pipefail
Je me gourre ?
IFS, c'est une recommandation de mon HS linux magazine.
Et comme pour le pipefail, ça semble plus logique avec ce séparateur là.
J'ai lu, j'ai compris l'intérêt, mais sans quelques années d'xp derrière moi en bash, impossible de me faire un idée sur le long terme.
oui, c'est ça, mais toi dans ton script tu as mis set -o -pipefail.
Pour l'IFS, c'est juste une préconisation que je te fais, après, vaut mieux savoir pourquoi on le change.
T'as fini de faire ta mauvaise tête
Tu sais quand on débute dans un langage, on a besoin de choses claires.
(je serai même tenter de penser que faire clair/simple est la priorité absolue sauf contraintes supplémentaires de perf ou autres).
Alors, pour moi qui débute, identifier facilement les variables dans un bash, est bien c'est chouette.
Et je sais aussi (grâce à toi et d'autres) qu'il y a une autre notation.
Je ne serai donc pas "perdu" si je rencontre cette notation.
Bon et maintenant qu'on a épuisé le sujet inutilité/futilité, peut-on repasser au code ?
Depuis que j'ai posté, je me suis rendu compte de plusieurs problèmes et je m'étonne que personne ne les ait relevé !
Partager