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. #41
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    et il faut qu'on devine ce que tu as vu ?
    poste à nouveau ton code quand tu lui apportes des modifications.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  2. #42
    Futur Membre du Club
    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
    Points : 7
    Points
    7
    Par défaut
    Il ne s'agit pas de deviner mais de savoir si vous pensez comme moi que ce script présente quelques lacunes voir carrément un bug !

    Dernière révision (mais rien n'a changé à part le pipefail et qq commentaires supplémentaires) :
    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
    71
    #!/bin/bash
     
    # -e : Interruption immédiate qd erreur
    # -u : Interdit le référencement des variables non définies
    # -o : Permet d'activer (-o) ou de désactiver (+o) des options
    #	pipefail : Pour que le code de statut soit cohérent avec l'erreur
    #	noclobber : Pour interdire le remplacement de fichier s'ils existent
    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}"

  3. #43
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Ta commande find n'est pas valide, je pense que tu t'es laissé induire en erreur par le post #4.
    La bonne manière de faire est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$actiondir" -type f -print0 | xargs -0 rm -f

  4. #44
    Futur Membre du Club
    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
    Points : 7
    Points
    7
    Par défaut
    Voilà du concret
    Merci Balkany
    Et effectivement je n'ai pas compris le coup du find.
    C'est corrigé.
    Des idées sur le fond ?

  5. #45
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Certaines remarques qui ont déjà été faites et pas (pleinement) intégrées :
    - tester l'existence d'un fichier avec rm -f est inutile : c'est soit test -f fichier && rm fichier, soit rm -f fichier ;
    - tu devrais appliquer les recommandations faites au sujet d'echo aussi dans le caseesac : c'est mieux au niveau performances, plus agréable à lire et moins source d'erreurs à l'écriture du code.

    Mais plus fondamentalement, je pense que les accolades autour des noms de variables ne devraient être utilisées que lorsqu'elles servent à quelque chose
    (bien que j'avais déjà lu les recommandations des devs google que tu as citées précédemment, et que je les avais trouvées pas mal, dans l'ensemble)

  6. #46
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    J'aime bien la phrase (que personne n'a encore citée) : "On ne met pas d'accolades s'il n'y a rien d'accolé".

    Quant à ton script, en substance, tu fais des conditions et des messages à l'utilisateur. Passablement inintéressant. Je ne sais même pas pourquoi tu nous sollicites. En shell, on peut être coincé par la modification de fichiers texte, les redirections, les conduites mal fagotées, etc. Mais dans ton cas, je ne vois aucun sujet.

    Cela dit, dans un petit village gaulois, on trouve toujours des sujets de discorde pour s'envoyer du poisson pas frais en travers de la face.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    « pas frais ?!!! il est pas frais mon poisson ?!!! »

    j'ai compris "many googlers" comme "de nombreux utilisateurs de Google", pas comme les développeurs de leur(s) site(s).
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #48
    Futur Membre du Club
    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
    Points : 7
    Points
    7
    Par défaut
    Pù#@*$ bah ça en aura fait couler de l'encre ces accolades !!!
    Et je pense que s'il y a bien un truc inutile, c'est bien ce débat.
    C'est comme les espaces qui précèdent ou suivent les parenthèses, les accolades, le signe égal, ...
    Certains les mettent d'autres pas...
    Moi la technique de zipe31 me va très bien, je trouve ça plus propre.
    Je l'adopte mais je n'essaye pas de convaincre qui que ce soit sur ce forum que c'est la bonne manière de faire.
    Et vous devriez faire pareil.

    Je vais bosser sur les echo.
    Ca va revenir à stocker des chaines (les contenus) et de les écrire en une seule fois à la fin du script.

    Mais que pensez-vous du ménage qui est fait systématiquement (ligne 19 à 21) ?
    Qui laisserait le système dans un état "instable" si on décidait d'annuler (CTRL+C) ou dans le cas d'un case non géré ?

    Et de la création du fichier préférence (ligne 42 à 44) mais qui n'est pas utilisé en ligne 55 ?

  9. #49
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    j'ai compris "many googlers" comme "de nombreux utilisateurs de Google", pas comme les développeurs de leur(s) site(s).
    Apparemment, les deux sens sont possibles oui : https://en.wiktionary.org/wiki/Googler.
    Mais étant donné la teneur et le style du document, son origine : https://github.com/google/styleguide, je pense que ça ne fait guère de doutes qu'il s'agit bien des devs.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    ah, oui.
    Style guides for Google-originated open-source projects
    donc, il s'agit d'une convention interne pour les projets initiés par Google.

    vivement qu'ils trouvent plus lisible de mettre des point-virgules à la fin de chaque ligne.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #51
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 273
    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 273
    Points : 12 708
    Points
    12 708
    Par défaut
    Citation Envoyé par balkany Voir le message
    Ta commande find n'est pas valide, je pense que tu t'es laissé induire en erreur par le post #4.
    La bonne manière de faire est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$actiondir" -type f -print0 | xargs -0 rm -f
    Citation Envoyé par nenex73 Voir le message
    Voilà du concret
    Merci Balkany
    Et effectivement je n'ai pas compris le coup du find.
    C'est corrigé.
    Des idées sur le fond ?
    Si on va par là, pourquoi ne pas faire directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$actiondir" -type f -exec rm -f {} \;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$actiondir" -type f -exec rm -f {} \+
    Cordialement.

  12. #52
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Oui, ou bien utiliser -delete.
    Quand je disais « la bonne manière de faire », c'était plutôt « la bonne manière de comprendre » l'indication de shellcheck mal comprise au post #4 :
    ^-- SC2038: Use -print0/-0 or -exec + to allow for non-alphanumeric filenames.

  13. #53
    Futur Membre du Club
    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
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Si on va par là, pourquoi ne pas faire directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$actiondir" -type f -exec rm -f {} \;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "$actiondir" -type f -exec rm -f {} \+
    T'a oublié les accolades
    Nan mais j'déconne

    Un peu subtile pour être compris par le néophyte que je suis !
    Quelle différence entre la fin de ligne avec un "+" ou un ";" ?

    En revanche je pense avoir compris le coup du "delete" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find "${actiondir}" -type f -delete

  14. #54
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 718
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 718
    Points : 15 098
    Points
    15 098
    Par défaut
    Citation Envoyé par balkany Voir le message
    Quand je disais « la bonne manière de faire », c'était plutôt « la bonne manière de comprendre » l'indication de shellcheck mal comprise au post #4 :
    ^-- SC2038: Use -print0/-0 or -exec + to allow for non-alphanumeric filenames.
    Oui, j'ai dû me gourrer quelque part.

    J'ai compris ça comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^-- SC2038: Use -print0 to allow for non-alphanumeric filenames.
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^-- SC2038: Use -0 to allow for non-alphanumeric filenames.
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^-- SC2038: Use -exec + to allow for non-alphanumeric filenames.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  15. #55
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 273
    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 273
    Points : 12 708
    Points
    12 708
    Par défaut
    Citation Envoyé par nenex73 Voir le message
    T'a oublié les accolades
    Nan mais j'déconne
    Bah non, elles sont à la fin

    Et je fais partie de l'ancienne génération, donc je fais beaucoup d'écart au règles d'usage

    Citation Envoyé par nenex73 Voir le message
    Un peu subtile pour être compris par le néophyte que je suis !
    Quelle différence entre la fin de ligne avec un "+" ou un ";" ?
    Avec le ";", il y aura autant de commande rm que de fichiers à effacer.
    Avec le + , il y aura une commande rm pour plusieurs fichiers
    Cordialement.

  16. #56
    Futur Membre du Club
    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
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Avec le ";", il y aura autant de commande rm que de fichiers à effacer.
    Avec le + , il y aura une commande rm pour plusieurs fichiers
    Tu élèves le scripting bash au rang d'art là

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