• [^] # Re: Script shell

    Posté par (site web personnel, Mastodon) . En réponse au message Script shell. É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 :)