Linoux

  Accueil

Zoom   

Accueil > Debian console > Shell > Tests et structures de contrôle
Bash - Scripts
LinuxInfo
Dezoom

Bash - Scripts

Mise à jour : Debian 9.0

1 - Rédaction

  • 1.1 - Principe

  • Exemple de fichier script :

  • $ cat démo
    #! /usr/bin/env bash
    # Ceci est une ligne de commentaire
    echo "Test ok" # ceci est une ligne de commande
    #! /usr/bin/env bash

    1.2 - Fonctions

    Une fonction doit-être définie (déclaration et contenu) avant son appel. Elle peut ensuite être appelée plusieurs fois.

    1.2.1 Déclaration et contenu

    $ cat démo
    #! /usr/bin/env bash
    function bonjour
    ....
    $ cat démo
    #! /usr/bin/env bash
    bonjour()
    ....
    $ cat démo
    #! /usr/bin/env bash
    bonjour()
    {
    echo "******** bienvenue Monsieur ******"
    }

    1.2.2 Utilisation

    Il est possible d'utiliser dans la fonction des paramètres passés en argument au moment de l'appel de la fonction . Ces paramètres restent locaux à la fonction.

    Dans l'exemple ci-dessous, la fonction est appelée deux fois, une fois avec la paramètre toto, un fois avec le paramètre titi

    $ cat démo
    #! /usr/bin/env bash
    ### Déclaration et définition de la fonction
    function bonjour
    {
    echo "******** bienvenue Monsieur $1 ******"
    }
    ### Utilisation de la fonction
    bonjour toto
    bonjour titi

    Exécution :

    $ bash démo
    ******** bienvenue Monsieur toto ******
    ******** bienvenue Monsieur titi ******

    1.3 - Modularité

    Il est possible d'appeler un script depuis un script, sous réserve qu'il soit dans le même répertoire que script appelant. L'inclusion s'effectue au moyen de la commande "source", suivie du chemin vers le script à inclure. La commande "source" peut-être remplacée par un point . , alias de la commande "source".

    $ cat démo
    #! /usr/bin/env bash
    source "./script1.sh"
    source "./script2.sh"
    echo fin du script
    $ cat script1.sh
    #! /usr/bin/env bash
    echo ceci est produit par le script1
    $ cat script2.sh
    #! /usr/bin/env bash
    echo ceci est produit par le script2
    $ bash démo
    ceci est produit par le script1
    ceci est produit par le script2
    fin du script
    $ cat fonction
    #! /usr/bin/env bash
    function bonjour
    {
    echo "******** bienvenue Monsieur $1 ******"
    }
    $ cat démo
    #! /usr/bin/env bash
    . "./fonction"
    bonjour $1
    bonjour $2
    $ ./démo  titi toto
    ******** bienvenue Monsieur titi ******
    ******** bienvenue Monsieur toto ******


    2 - Exécution

    2.1 - Lancement

    Un script peut-être lancé

    $ bash démo
    test Ok
    $ chmod u+x démo
    $ ./démo
    test Ok
    $ echo $PATH
    /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
    # mv démo /usr/local/bin/
    $ démo
    test OK
    $ bash
    $ ps
    PID TTY TIME CMD
    2658 pts/0 00:00:00 bash
    2677 pts/0 00:00:00 bash
    2690 pts/0 00:00:00 ps
    $ exec ./démo
    Test ok
    $ ps
    PID TTY TIME CMD
    2658 pts/0 00:00:00 bash
    2691 pts/0 00:00:00 ps
    $ ls -l /mnt_chroot
    .....
    script_démo
    ....

    # chroot /mnt_chroot ./script_démo

    2.2 - Arguments

    Les arguments passés au lancement du script sont utilisables dans le script comme paramètres de positionnement. Exemple :

    $ cat démo
    #! /usr/bin/env bash
    echo Paramètre 1 : $1
    echo Paramètre 2 : $2
    echo Paramètre 3 : $3
    echo Liste de paramètres: $@
    echo Nombre de paramètres : $#
    echo Nom du script : $0

    Exécution :

    $ bash démo ceci est un test de paramètres
    Paramètre 1 : ceci
    Paramètre 2 : est
    Paramètre 3 : un
    Liste de paramètres: ceci est un test de paramètres
    Nombre de paramètres : 6
    Nom du script : démo

    1.3 - Droits et permissions

    $ sudo -l
    [sudo] Mot de passe de pengouin : 
    Entrées par défaut pour pengouin sur asus :
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

    L'utilisateur philippe peut utiliser les commandes suivantes sur asus :
    (ALL : ALL) ALL

    1.4 - Valeur de sortie

    $ ./démo
    ....
    $ echo $?
    0
    $ cat démo
    #! /usr/bin/env bash
    exit 65
    $ ./démo
    $ echo $?
    65

    1.6 - Debuggage

    Pour faire afficher les lignes de commande pendant l'exécution,

    $ bash -x démo
    + echo Test ok
    Test ok
    $ cat démo 
    #! /usr/bin/env bash
    set -x
    # Ligne de commentaire
    echo Test ok

    $ ./démo
    + echo Test ok
    Test ok

    3 - Variables

    3.1 - Variables d'environnement

    Les variables d'environnement sont disponibles dans le script :

    $ var1=inconnu
    $ export var2=connu
    $ cat démo
    #! /usr/bin/env bash
    echo var1 est ....$var1
    echo var2 est ....$var2
    echo $HOME
    $ ./démo
    var1 est ....
    var2 est ....connu
    /home/nom_utilisateur

    3.2 - Variables "internes"

    Les variables créées dans un script ne sont pas disponibles dans le shell parent ;

    $ cat démo
    #! /usr/bin/env bash
    variable_interne=test
    echo $variable_interne
    $ ./démo
    test
    $ echo $variable_interne