Transcript Unix

Shell
Equipe ID
Bioinformatics Training Course
June 2014
Shell
Le shell est le langage de commande
standard du système UNIX
Bourne shell
Korn shell
C-shell
Bash-shell.
Shell Scripts
$ more example.sh
#!/bin/bash
while true
do
cat somefile > /dev/null
echo .
done
File example.sh must have executable rights
bash example.sh
./example.sh
Shell

Interprété
 Vrai langage de programmtion : test,
itérations, récursion, variables,
environnement, alias, variables typées,
opérateurs logiques, arithmétiques et
binaires, variables locales, gestion des
tâches, historique et édition des commandes
Shell : variables

Identificateur
Une suite quelconque de :
- lettres minuscules ou majuscules
- chiffres
- _ (underscore)
- ne commençant pas par un chiffre



Valeur : toujours une chaine de caractères
Opérateur d’affectation : « = »
Evaluation d’une variable :
$variable

Affichage de la valeur d’une variable :
echo $variable
Shell : compléments syntaxiques
Commentaire
# la fin de la ligne est ignorée
 Les commandes doivent être séparées
par des retours chariot ou des points
virgules
 Séparateur implicite du shell =
caractère espace

Shell : redirection des entrées-sorties

Entrée
commande > fichier  commande 1> fichier
Associe le fichier au descripteur 1 (implicitement)
commande 2> fichier # erreur redirigée vers fichier
commande >&2
# stdout associé à stderr
commande 2>&1
# stderr associé à stdout

Ex :
commande 2>/dev/null 1>&2
commande 1>/dev/null 2>&1
Shell : saisie

Commande << EOF
# la commande lit l’entrée standard jusqu’à la reconnaissance
d’une ligne constituée de la chaîne EOF

Ex:
Cat > compile << FIN
if [ $# -ne 2 ] ; then exit 1
fi
if [ -r $1 ]
then cc $1 –o $2 -0 ; size $2
else exit 2
fi
FIN
Shell : lecture de la valeur d’une varaible
dans un script shell
Lecture de la valeur d’une variable :
read Variable1 …. Variablen
Val1 … Valn
Vali est liée à Variablei

Protection des variables préalablement
readonly Variable1 …. Variablen

Shell : délimiteurs de chaines de caractères
'chaine' : la chaîne est prise littéralement
sans substitution
 "chaine" : la chaîne est prise littéralement
après substitution des caractères $
(évaluation des variables) et \.
 ‘commande`: la chaine complète est
remplacée par la valeur de la commande (la
sortie standard de celle-ci).

Shell : délimiteurs de chaines de caractères
(exemple)
x=toto
echo $x
toto
echo ' $x '
$x
echo " $x "
toto
X=pwd
echo $x
pwd
echo " $x = ‘$x` «
pwd=/usr/vous
Shell : évaluation des variables
$var : valeur de var; rien si var indéfinie
 ${var} : idem
 ${var:-val} : valeur de var si définie, val dans le cas
contraire; var inchangée
 ${var:=val} : valeur de var si définie, val dans le cas
contraire; var devient val si indéfinie
 ${var:?message} : valeur de var si définie, sinon la
valeur de message est affichée et le shell se termine
 ${var:+val} : valeur de var si définie, rien sinon.

Shell : visibilité des variables
Les variables sont locales à un shell
 Les variables du père ne sont pas
implicitement transmises à ses fils
(export)
 Le fils ne peut pas modifier les variables
du père.

Shell : l’environnement de l’utilisateur

Certaines variables sont initialisées au
début de la session par le shell luimême qui exécute deux commandes :
/etc/profile
$HOME/.profile (ou $HOME/.bashrc)

ENV
Shell : principales variables d’environnement








HOME : répertoire initial
PATH : chemin de recherche des exe (login)
TERM : le type de terminal
MAIL : la boite aux lettres
SHELL : le type de shell
LOGNAME : nom de connexion
HISTSIZE : le nombre de lignes d’historique
PWD : le répertoire courant
Shell : paramètres de procédure
La valeur des paramètres est transmise à la
procédure de la façon suivante :
$0 : le nom de la procédure
$i : le ième paramètre
$* : la liste de tous les paramètres
$# : le nombre paramètres fournis à la procédure
 Opérateurs liés aux paramètres :
shift[n] : décale de n positions vers la gauche la liste
des paramètres et décrémente $# de n
set paramètres : range de nouveaux paramètres dans
l’environnement

Shell : paramètres de procédure (exemple)
set ‘who am i`
echo "Utilisateur : $1 "
echo " Terminal : $2 "
echo " Connexion : $4 $3 $5 "
Shell : case

Le choix multiple : case
case <chaine> in
<constante>) <liste de commandes>;;
<constante>) <liste de commandes>;;
…
esac
La constante peut-être de la forme :
constante1| constante2 | … |constanteN
Shell : case (exemple)
# la commande « qui » avec la date en français
set ‘who am i`
echo "Utilisateur : $1 "
echo "Terminal : $2 "
case $3 in
Jan) m=Janvier;;
Feb) m=Fevier;;
…
Dec) m=Decembre;;
esac
echo " Connexion : $4 $m $5 "
Shell : for
for <var> in <chaine1> … <chaineN>
do <liste de commandes>
done
for <var>
do <liste de commandes>
done
for <var> in $*
do <liste de commandes>
done
Exemple :
#affichage des arguments de la ligne de commande
for arg in $*
do echo $arg
done
Shell : expr

La commande expr :
effectue des opérations sur les expressions passées en paramètre
chaque paramètre est une expression ou un opérateur
Opérations arithmétiques entre chaînes numériques :
+ - / * %

Opérations de comparaions :
= != < > <= >=


Sélection d’expression
expr1 | expr2 vaut expr1 si non nul et n’est pas une chaine vide, expr2
sinon
expr1 & expr2 vaut expr1 si mes 2 expressions ne sont ni nulles ni
vides, 0 sinon
Shell : autres variables
Autres variables initialisées par le shell
$$ numéro du processus courant
$! Numéro du dernier processus background
$? Code retour de la dernière commande exécutée


Le code retour d’une liste de commande est le code retour de la dernière
commande de la liste
0 : OK
!=0 : Problème
Ce code retour peut être utilisé dans les structures de contrôle à la manière d’un
booléen
Initialisation explicite du code retour dans uns sipt shell
exit : le code retour de la procédure sera celui de la dernière commande exécutée
avant exit

exit valeur : le code retour de la procédure sera valeur
Shell : if
L’alternative : if
if <expression>
then <liste de commandes>
else <liste de commandes>
fi

Exemple :
if cc _0 *.c
then pack *.c
else rm *.o
fi
Shell : || et &&
Exécution conditionnelle : || et &&
Pour éviter l’usage explicite du if

Exemple :
rm xx
ls –l xx || echo Echec
ls –l xx && echo Reussite
echo Reussi || ls –l xx
echo Pas de la && ls –l xx
La commande test

La commande test permet :
D’exprimer des conditions sur des fichiers
D’effectuer des comparaisons

2 formes
Test expression
[ expression ]

Le résultat d’un test est 0 si la condition est
remplie et différente sinon. En shell, 0 est
équivalent à vrai
La commande test

Conditions sur des fichiers
expr option nom
option :
-f : vrai si nom est un fichier
-d : vrai si nom est un répertoire
-r : vrai si nom est un fichier lisible
-w : vrai si nom est un fichier modifiable
-x : vrai si nom est un fichier exécutable

Comparaison de chaines
string1 = string2
string1 != string2
-n string
égalité
inégalité
vraie si longueur de string != 0
La commande test

Comparaisons nmériques
n1 -eq n2
-ne
-lt
-gt
-ge

vrai
vrai
vrai
vrai
vrai
si
si
si
si
si
n1
n1
n1
n1
n1
= n2
!= n2
< n2
> n2
>= n2
Connecteurs logiques
!
: non
-a
: and
-o
: or
\( … \) : pour associer des expressions
Shell : while et until

While : tant que la condition est vraie
while <expression>
do <liste de commandes>
Done

Until : itération tant que la condition est
fausse
until <expression>
do <liste de commandes>
done