Scripts

Mise à jour : Debian 9.0

Un script est un une séquence de commandes bash exécutable à partir d'un fichier texte.

1 - Création

1.1 - Principe

#! /usr/bin/env bash

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

1.2 - Modularité

1.2.1 Appel de scripts

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

Dans l'exemple ci-dessous, les scripts script1 et script2 sont appelés à partir du script "principal"

$ cat principal
#! /usr/bin/env bash
source "./script1"
source "./script2"
echo fin du script
$ cat script1
#! /usr/bin/env bash
echo ceci est produit par le script1
$ cat script2
#! /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

1.2.3 Utilisation de fonctions

Des fonctions peuvent être définies et utilisées à l'intérieur d'un script. Elles doivent être définies avant d'être utilisées. Elles peuvent être également définies dans un script séparé.

$ 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 ******

1.2.4 Utilisation des alias

Pour utiliser un alias dans un script,

#!/bin/bash

# 1 - Activation des alias :
shopt -s expand_aliases

# 2 - Création des alias, par exemple :
alias pingg='ping -c 3 google.fr'

2 - Exécution

2.1 - Lancement

2.1.1 Lancement avec ouverture d'une nouvelle session bash

Un script peut-être lancé en ouvrant un nouvelle session bash

$ 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

2.1.2 Lancement dans la session bash en cours

Un script peut-être lancé sans création d'une nouvelle session bash, avec la commande exec au lieu de bash, après avoir rendu le fichier exécutable. Toutefois, à la sortie du script, la session en cours est fermée.

$ 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

2.1.3 Lancement dans le cadre d'un chroot

Un script peut-être lancé simultanément avec l'ouverture d'un chroot, en indiquant le chemin du script PAR RAPPORT au point de montage :

Exemple, lancement du script script_démo, dans le chroot monté en /mnt_chroot :

$ 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