IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Votre avis sur un script bash


Sujet :

Shell et commandes GNU

  1. #21
    Membre averti
    Homme Profil pro
    artisan développeur
    Inscrit en
    Juin 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : artisan développeur

    Informations forums :
    Inscription : Juin 2020
    Messages : 29
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Combien de redirection dans "${actiondir}/0-SecurityProfile" ? Combien dans "${preferencesfile}" ? etc. Combien d'echo ?
    Faut que tu m'expliques ce que tu entends par redirection ?

  2. #22
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Citation Envoyé par N_BaH Voir le message
    les accolades sont inutiles autour des Développements de paramètres, mais pas les guillemets !
    (…)
    pas d'accolades inutiles,
    et des guillemets, toujours.
    il y a de nombreux autres cas dans lesquels l'absence de guillemets est problématique.
    Je n'en serais pas si sûr…

    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
    Ce qui est vrai pour les guillemets, l'est tout autant pour les accolades

  3. #23
    Membre averti
    Homme Profil pro
    artisan développeur
    Inscrit en
    Juin 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : artisan développeur

    Informations forums :
    Inscription : Juin 2020
    Messages : 29
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Ce qui est vrai pour les guillemets, l'est tout autant pour les accolades


    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}"

  4. #24
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Citation Envoyé par zipe31
    Ce qui est vrai pour les guillemets, l'est tout autant pour les accolades.
    je sais que tu voudrais qu'on mette des accolades tout le temps; je le lis sur tous les forums auxquels tu participes.
    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.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #25
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Or,
    hors "concaténation" (comme tu en fais l'exemple : la variable $fleurs n'existe pas), et
    hors "modification" de la valeur de la variable (${var:1:2}, par exemple),
    hors tableau,
    Ça fait beaucoup d'or en barre tout ça

    Citation Envoyé par N_BaH Voir le message
    elles ne servent à rien, voire nuisent à la lisibilité du script.
    Ça c'est ton point de vue, que je ne partage pas du tout.

  6. #26
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    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.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #27
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    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 !

  8. #28
    Membre averti
    Homme Profil pro
    artisan développeur
    Inscrit en
    Juin 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : artisan développeur

    Informations forums :
    Inscription : Juin 2020
    Messages : 29
    Par défaut
    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

  9. #29
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Authored, revised and maintained by many Googlers.
    imagine que cet article ait été rédigé par des gens comme toi... des personnes moins expérimentées,
    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'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #30
    Membre averti
    Homme Profil pro
    artisan développeur
    Inscrit en
    Juin 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : artisan développeur

    Informations forums :
    Inscription : Juin 2020
    Messages : 29
    Par défaut
    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.

  11. #31
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    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 !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #32
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    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

  13. #33
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    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.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  14. #34
    Membre averti
    Homme Profil pro
    artisan développeur
    Inscrit en
    Juin 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : artisan développeur

    Informations forums :
    Inscription : Juin 2020
    Messages : 29
    Par défaut
    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 ?

  15. #35
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Il y a une petite erreur de compréhension sur la commande set:
    active l'option
    désactive l'option

    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 ?

  16. #36
    Membre averti
    Homme Profil pro
    artisan développeur
    Inscrit en
    Juin 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : artisan développeur

    Informations forums :
    Inscription : Juin 2020
    Messages : 29
    Par défaut
    Je veux activer l'option pipefail (ce qui semble être un comportement plus normal que sans), et donc je fais :
    pour activer
    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.

  17. #37
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    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.

  18. #38
    Membre averti
    Homme Profil pro
    artisan développeur
    Inscrit en
    Juin 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : artisan développeur

    Informations forums :
    Inscription : Juin 2020
    Messages : 29
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    oui, c'est ça, mais toi dans ton script tu as mis set -o -pipefail.
    Bien vu

  19. #39
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    IFS, c'est une recommandation de mon HS linux magazine.
    ça va dans le même sens.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  20. #40
    Membre averti
    Homme Profil pro
    artisan développeur
    Inscrit en
    Juin 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : artisan développeur

    Informations forums :
    Inscription : Juin 2020
    Messages : 29
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ça va dans le même sens.
    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é !

Discussions similaires

  1. [MySQL] Votre avis sur la qualité d'un script
    Par Telecaster dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/06/2008, 10h23
  2. Votre avis sur mon 1er script
    Par jfrsm dans le forum VBScript
    Réponses: 3
    Dernier message: 17/09/2007, 09h45
  3. Donnez votre avis sur les articles de Developpez.com
    Par Geronimo dans le forum C++Builder
    Réponses: 13
    Dernier message: 14/01/2007, 22h00
  4. [Blog] Votre avis sur ce script de Blog en PHP (GPL)
    Par peck dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 04/01/2007, 09h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo