Page 1 sur 1

[Script shell] Un petit cours de bash ?

Publié : sam. 08 août 2009, 15:34
par Murzan
Hello,

Je tente d'exécuter du bash mais j'ai un petit problème, je souhaite, en cas d'erreur, que le script s'interrompe automatiquement.
Je sais qu'en cas de problème, un code d'erreur est retourné, mais je ne sais pas comment l'exploiter... :oops:

Voici un exemple de portion de code :

Code : Tout sélectionner

mkdir /newarch
mkswap /dev/hda3 --> en cas d'erreur s'interrompre
swapon /dev/hda3
...
Merci d'avance !

Re: [Script shell] Un petit cours de bash ?

Publié : sam. 08 août 2009, 16:01
par schaars
Bonjour

La valeur de retour d'un programme est contenue dans la variable $?.
Par exemple :

Code : Tout sélectionner

$ false 
$ echo $?
1
$ true
$ echo $?
0
Et donc l'idée est de tester cette valeur, par exemple en faisant (j'ai pas regardé

Code : Tout sélectionner

mkswap /dev/hda3 --> en cas d'erreur s'interrompre

if [ $? -eq 0 ]; then
    swapon /dev/hda3
else
    echo erreur
fi

Re: [Script shell] Un petit cours de bash ?

Publié : sam. 08 août 2009, 17:35
par mathieuI
schaars a écrit :Bonjour

La valeur de retour d'un programme est contenue dans la variable $?.
Par exemple :

Code : Tout sélectionner

$ false 
$ echo $?
1
$ true
$ echo $?
0
Et donc l'idée est de tester cette valeur, par exemple en faisant (j'ai pas regardé

Code : Tout sélectionner

mkswap /dev/hda3 --> en cas d'erreur s'interrompre

if [ $? -eq 0 ]; then
    swapon /dev/hda3
else
    echo erreur
fi

Code : Tout sélectionner

mkswap /dev/hda3 --> en cas d'erreur s'interrompre

if [ $? -eq 0 ]; then
    swapon /dev/hda3
else
    echo erreur
    kill $$
fi
plutôt, non ? (au cas où le script ne s'arrête pas ici)

Re: [Script shell] Un petit cours de bash ?

Publié : sam. 08 août 2009, 17:38
par aldevar
Pour completer la réponse de schaars, je rajouterai quelques variables très pratique à connaitre comme par exemple les arguments d'une commandes.

$# ? nombre d'arguments de la commande
$1 ? Premier argument
$2 ? Second argument
etc...

$! renvoie le pid d'une commande en background. Par exemple :

Code : Tout sélectionner

[aldevar@Fifou-Laptop Images]$ firefox &
[1] 548                                 
[aldevar@Fifou-Laptop Images]$ echo $!
548                                   
[aldevar@Fifou-Laptop Images]$
Plus d'info ici

Re: [Script shell] Un petit cours de bash ?

Publié : sam. 08 août 2009, 17:42
par schaars
mathieuI a écrit :

Code : Tout sélectionner

mkswap /dev/hda3 --> en cas d'erreur s'interrompre

if [ $? -eq 0 ]; then
    swapon /dev/hda3
else
    echo erreur
    kill $$
fi
plutôt, non ? (au cas où le script ne s'arrête pas ici)
Oui, on peut faire un exit ou un return si on est dans une fonction. Ça dépend du script, j'ai juste donné l'idée.

Re: [Script shell] Un petit cours de bash ?

Publié : sam. 08 août 2009, 18:00
par Murzan
Merci pour vos réponses !
Cela m'a permis de compléter mon script qui marche maintenant parfaitement !

Cordialement,
Murzan