Les shells UNIX : Le Bourne Shell
proc1
proc2
proc3
proc1 ; proc2 ; proc3
proc1 & proc2 & proc3 &
< | 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 |
proc1 | proc2
équivaut à :
proc1 > fich
proc2 < fich
* | n'importe quelle chaîne de caractères |
? | n'importe quel caractère |
[ ... ] | n'importe quel caractère décrit entre les crochets |
exécution du fichier .login pour initialiser l'environnement
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 |
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 |
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) |
$0 | nom de la commande |
$ n | 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
$$ | le numéro de processus de la dernière commande |
$? | Status de la dernière commande |
\ | banalise le caractère suivant |
& ... & | banalise les caractères sauf \ , $ et ` |
' ... ' | banalise tous les caractères |
` ... ` | substitution de commande |
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 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 commande
do
liste_commandes
done
while [ -r " $1 " ]
do
cat $1 >> concat
shift
done
until commande
do
liste_commandes
done
until [ ! -r " $1 " ]
do
cat $1 >> concat
shift
done
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 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
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 |
# | 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 a | 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 |
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`
© Isabelle Vollant
( http://www.multimania.com/vollant )
mise à jour le 10/04/97