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