retour sur @lyon coup de coeur du jour discussion roulette meteo locale Le Bourne shell retour
editorial contact par mail

 

Processus séquentiels

proc1
proc2
proc3
proc1 ; proc2 ; proc3

Processus en parallèles

proc1 & proc2 & proc3 &

Redirection des entrées-sorties

l'entrée standard est lu à partir d'un fichier 
La sortie standard est redirigée dans un fichier (RAZ du fichier) 
>>  La sortie standard est redirigée dans un fichier (concaténation du fichier) 
2>  les erreurs sont redirigées dans un fichier 
2>&1  les erreurs sont redirigées dans le même fichier que la sortie standard 

Les pipes

proc1  proc2

équivaut à :

proc1 > fich
proc2 < fich

Génération des noms de fichiers

n'importe quelle chaîne de caractères 
n'importe quel caractère 
[ ... n'importe quel caractère décrit entre les crochets 

Le login

exécution du fichier .login pour initialiser l'environnement

 

Les paramètres du shell

HOME  le home directory ( répertoire de login ) 
PATH  chemin de recherche pou l'exécution des commandes 
CDPATH  chemin de recherche pour la commande cd 
MAIL  chemin indiquant le répertoire du courrier 
PS1  primary system prompt 
PS2  secondary system prompt 
IFS  internal field separator 
SHELL  indique le shell de login 

L'exécution d'un script en Bourne Shell

sh nom_fichier
ou rendre le fichier exécutable (chmod u+x nom_fichier) puis taper le nom du fichier
Pour forcer l'exécution du fichier en Bourne Shell, le fichier doit commencer par #!/bin/sh
sh -n nom_fichier  interprète les commandes sans les exécuter 
sh -v nom_fichier  imprime les lignes comme elles sont lues 
sh -x nom_fichier  imprime les lignes comme elles sont interprétées 

Les variables

variable = valeur  affectation (Attention , ne pas mettre d'espace autour de =) 
$variable  valeur de la variable 
${ variable }  valeur de la variable (permet d'éviter certaines ambiguités: si a="var",${a}b renvoie varb alors que $ab est invalide) 

récupération des paramètres dans la ligne de commande

$0  nom de la commande 
$ nieme paramètre 
$#  nombre de paramètres 
$*  liste de tous les paramètres 
Pour décaler les paramètres, on peut utiliser la commande shift

Quelques variables spéciales

$$  le numéro de processus de la dernière commande 
$?  Status de la dernière commande 

Les caractères spéciaux

\  banalise le caractère suivant 
& ... &  banalise les caractères sauf \ , $ et ` 
' ... '  banalise tous les caractères 
` ... `  substitution de commande 

Les instructions

Les commandes if , while , until teste le status de la commande. (voir le man pour determiner le status renvoyé par une commande particuliere, en géneral si la commande s'execute correctement, le status est vrai) Attention mettre une négation devant la commande (if ! cmde) ne permet pas de tester l'échec de la commande car la négation s'applique au résultat de la commande et non pas à son status.
Dans cette optique, le test est considéré comme une commande, on peut d'ailleurs l'utiliser sur une ligne de commande.

if

if cmde
        then 

                liste_commandes
        [elif liste_commandes
                then
                        liste_commandes] ...
        [else liste_commandes]
fi
if test -f $1
then
        file $1
else
        echo " le fichier n'existe pas "
fi
if grep jean personnel
then
        echo jean >> disponible
elif grep pierre personnel
        then
                echo pierre >>  disponible
        else
                echo vide >>  disponible
fi

while

while commande
do
        liste_commandes
done
while [ -r " $1 " ]
do
        cat $1 >> concat
        shift
done

until

until commande
do
        liste_commandes
done
until [ ! -r " $1 " ]
do
        cat $1 >>  concat
        shift
done

case

case para in
        choix1[|choix2] ... ) liste_commandes ;;
esac
case $1 in
        -d | -r ) rmdir $dir
                  echo "option -d ou -r ";;
        -o )      echo "option -o ";;
        * )       echo "réponse incorrecte ";;
esac

for

for para [in liste]     
do
        liste_commandes
done
La variable para prend successivement les valeurs de la liste
si la liste est omise, para prend alors les valeurs passées en paramètres du script
for i in `ls`
do
        cp $i /dir/$i
        echo "$i copie "
done
N'oublier pas les ` qui force l'exécution du ls.
for dir in /dev /usr /users/bin /lib
do
        num=`ls $dir|wc -w`
        echo "$num fichiers dans $dir "
done
for i
do
        echo $i
done

les tests

N'oubliez pas que le test est une commande qui peut être exécutée directement sur la ligne de commande
test expr ou [ expr ] (Attention il faut un espace apres [ et avant ])
ou expr vaut :
-r fichier  vrai si le fichier existe et est accessible en lecture (R) 
-w fichier  vrai si le fichier existe et est accessible en écriture (W) 
-x fichier  vrai si le fichier existe et est exécutable (X) 
-f fichier  vrai si le fichier existe et est un fichier régulier 
-d fichier  vrai si le fichier existe et est un répertoire 
-s fichier  vrai si le fichier existe et a une taille non nulle 
-H fichier  vrai si le fichier existe et est un répertoire caché 
-h fichier  vrai si le fichier existe et est un lien symbolique 
s1 = s2  vrai si les deux expressions sont égales 
s1 != s2  vrai si les deux expressions sont différentes 
s1  vrai si s1 n'est pas la chaîne nulle 
e1 -eq e2  vrai si les deux entiers e1 et e2 sont algébriquement égaux 
( autres comparaisons : -ne , -gt , -ge , -lt , -le) 
négation unaire 
-a  opération binaire ET 
-o  opération binaire OU 

divers

commentaires , mais #!/bin/sh en début de fichier force l'exécution en Bourne Shell
( cmde exécute la commande dans un sous-shell 
read lecture d'une entrée pendant l'exécution d'un script 
exit num  renvoie le status de la commande (en général 0 la commande s'est bien exécutée) 
return num  code d'erreur 
. script  exécution du script dans le shell courant 
eval arg  interprète arg avant de l'exécuter 
cmd1 && cmd2  séparateur conditionnel (cmd2 sera exécuté si cmd1 s'est exécuté correctement) 
cmd1 || cmd2  séparateur conditionnel (cmd2 sera exécuté si cmd1 ne s'est pas exécuté correctement) 
nom_fonction () 
{ liste_commandes ;} 
définition d'une fonction 
exec arg  exécute la commande dans un nouveau shell 
set var  initialisation d'une variable 
liste de tous les paramètres du système 
positionne les paramètres $i ( set a b c positionne $1 à a, $2 à b et $3 à c) 
unset var  raz d'une variable 
type cmde  indique la localisation d'une commande 
readonly var  empêche la modification d'une variable 

Les expressions

expr exp op exp  exécute des opérations arithmétiques (op vaut : + , - , \* , / , % , = , \> , \< , \> = , \< = , !=) 
expr exp1 \| exp2  renvoie exp1 si l'expression n'est pas nulle, sinon exp2 
expr exp1 \& exp2  renvoie exp1 si l'expression n'est pas nulle, sinon exp2 
expr exp1 : exp2  comparaison des deux arguments (renvoie le nombre de caractères en commun) 
expr length exp  retourne le nombre de caractères de exp 
expr substr exp n1 n2  retourne une sous chaîne de exp commençant a la place n1 et de n2 caractères 
expr index exp car  retourne la position du caractère car dans la chaîne exp 

l'expression est une commande donc pour affecter une opération à une variable, il faut forcer son exécution :

 a = `expr $b + $c`