Forum Linux.débutant Script shell

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
4
fév.
2020

Bonjour,

Je souhaite mettre en place un script qui en fonction du status d'un service va m'envoyer un mail.

En gros, mon application nordvpn à une fonction : nordvpn status
Je veux recevoir un mail si la réponse est : Status: Disconnected
J'ai créer une aliase vpn=nordvpn status

J'ai tenté ça mais ne fonctionne pas

#!/bin/bash
shopt -s expand_aliases # Must set this option, else script will not expand ali$
alias vpn='nordvpn status'
Status="vpn"
if [ $vpn = "Status: Disconnected" ]
then
echo "VPN KO !!" | sendmail toto@free.fr.invalid
fi
  • # Script shell

    Posté par  . Évalué à -4.

    J'ai fini par trouver :)

    • [^] # Re: Script shell

      Posté par  . Évalué à 6. Dernière modification le 04 février 2020 à 22:50.

      et pourquoi ne pas poster la solution? Si quelqu'un d'autre se pose la question, ça pourrais lui être utile, a moins que seul toi ai le droit d'avoir des réponses sur le net?

      Désolé, je suis acerbe, mais le net est un résau pour partager le savoir à la base, pas pour partager le fait d'arriver a faire un truc.

      Note: je t'ai pas moinssé, je trouve ça dommage de moinsser sans explications

      • [^] # Re: Script shell

        Posté par  (site web personnel) . Évalué à 7.

        En écrivant "désolé, je suis acerbe", tu pourrais te rendre compte que la personne en question ne mérite peut être pas cette colère. Il/elle semble vraisemblablement débuter. En langage bienveillant, ça donne:

        Pourrais tu poster ta solution ? Si quelqu'un d'autre se pose la question, ça pourrait lui être utile.

        • [^] # Re: Script shell

          Posté par  . Évalué à 2. Dernière modification le 08 février 2020 à 01:41.

          Tu as raison, mes excuses.

          [edit]
          C'est une bien mauvaise excuse, mais la lassitude des gens qui clament avoir trouvé la solution sans la partager est pesante, alors que je n'ai découvert le web qu'il y a 15 ans, ou les gens semblaient, la ou j'aillais, toujours considérer l'échange comme la base.
          Mea culpa, encore.
          Cela dis, tu as raison, c'est pas en étant un con que les choses s'améliorerons.
          [/edit]

  • # Script shell

    Posté par  . Évalué à 2. Dernière modification le 06 février 2020 à 07:52.

    ^

    #!/bin/bash
    vpn='nordvpn status'
    if $vpn = Status: Disconnected
    then
    nordvpn c
    fi
    
    • [^] # Re: Script shell

      Posté par  (site web personnel) . Évalué à 4. Dernière modification le 10 février 2020 à 11:29.

      Hello,

      il y a un soucis dans ton script. Tu compares la chaîne nordvpn status à… je ne sais trop quoi…

      Si tu veux faire du bash, voici une ressource qui te sauvera la vie:
      http://www.tldp.org/LDP/abs/html/abs-guide.html
      (et sa traduction française, très légèrement en retard: https://abs.traduc.org/abs-fr/ )

      Maintenant analysons les soucis de ton script:

      vpn='nordvpn status'

      Le problème ici c'est que tu veux la valeur de retour de cette commande, or tu utilises des guillemets simples. Il faudrait des guillemets arrières (backquote, accessibles via la combinaison AltGr+7: `). Vu la confusion visuelle pour les débutants, utilise plutôt la forme moderne avec dollar et parenthèses:

      vpn=$(nordvpn status)

      Ensuite ici tu veux sans doute tester que le texte renvoyé par la commande nordvpn status est égal à une chaine de caractères.

      if $vpn = Status: Disconnected

      Dans ce cas utilise des guillemets doubles pour délimiter ta chaine: "Status: Disconnected". De plus, c'est une bonne pratique d'utiliser systématiquement des guillemets doubles quand tu rappelles le contenu d'une variable. Cela permet d'éviter plein de pièges quand la valeur contient des espaces (particulièrement gênant pour gérer les noms de fichiers).

      if "$vpn" = "Status: Disconnected"

      Ceci devrait donc fonctionner:

      #!/bin/bash
      vpn=$(nordvpn status)
      if "$vpn" = "Status: Disconnected"
      then
      nordvpn c
      fi

      Pour bien apprendre bash, je te conseille aussi d'utiliser un linter comme shellcheck, qui doit être disponible sur ta distribution Linux. En lançant shellcheck monscript.sh, il te remontera des messages sur les potentielles erreurs.

      Bon scripting :)

      • [^] # Re: Script shell

        Posté par  . Évalué à 1.

        merci beaucoup pour ces explications ;-)

        En revanche je viens de tester mon script corrigé comme suggéré et j'ai une erreur :
        root@srv-vpn:~# ./vpn.sh
        ./vpn.sh: line 3: Status: Disconnected: command not found

        J'ai l'impression qu'il reprends le résultat et l’exécute comme une commande

        • [^] # Re: Script shell

          Posté par  (site web personnel) . Évalué à 2.

          Tiens, j'avais répondu mais on dirait que la réponse n'est pas partie…

          J'avais oublié de rajouter les crochets autour du test (attention à ne pas oublier les espaces avant et après les crochets):

          #!/bin/bash
          vpn=$(nordvpn status)
          if [ "$vpn" = "Status: Disconnected" ]
          then
              nordvpn c
          fi
  • # Script shell

    Posté par  . Évalué à 1.

    Bonjour grad76,
    Si tu veux récupérer le résultat d'une commande je te conseille plus de faire

    vpn=$(nordvpn status)

    mais je suis aussi débutant pour aider donc ne la prend pas comme une solution qui est sûre ^

    Amiralgaby#1847

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.