shell equipe id bioinformatics training course june 2014

28
Shell Shell Equipe ID Bioinformatics Training Course June 2014

Upload: bastien-quere

Post on 04-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Shell Equipe ID Bioinformatics Training Course June 2014

ShellShell

Equipe IDBioinformatics Training CourseJune 2014

Page 2: Shell Equipe ID Bioinformatics Training Course June 2014

Le shell est le langage de commande standard du système UNIXBourne shellKorn shellC-shellBash-shell.

ShellShell

Page 3: Shell Equipe ID Bioinformatics Training Course June 2014

$ more example.sh$ more example.sh

#!/bin/bash#!/bin/bashwhile truewhile truedodo cat somefile > /dev/null somefile > /dev/null echo . .donedone

File example.sh must have executable rightsFile example.sh must have executable rights

bash example.shbash example.sh./example.sh./example.sh

Shell ScriptsShell Scripts

Page 4: Shell Equipe ID Bioinformatics Training Course June 2014

ShellShell

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

Page 5: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : variablesShell : variables IdentificateurIdentificateur

Une suite quelconque de :Une suite quelconque de :- lettres minuscules ou majuscules- lettres minuscules ou majuscules- chiffres- chiffres- _ (underscore)- _ (underscore)- ne commençant pas par un chiffre- ne commençant pas par un chiffre

Valeur : toujours une chaine de caractèresValeur : toujours une chaine de caractères Opérateur d’affectation : « = »Opérateur d’affectation : « = » Evaluation d’une variable :Evaluation d’une variable :

$variable$variable Affichage de la valeur d’une variable :Affichage de la valeur d’une variable :

echo $variableecho $variable

Page 6: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : compléments Shell : compléments syntaxiquessyntaxiques

CommentaireCommentaire

# la fin de la ligne est # la fin de la ligne est ignoréeignorée

Les commandes doivent être Les commandes doivent être séparées par des retours chariot ou séparées par des retours chariot ou des points virgulesdes points virgules

Séparateur implicite du shell = Séparateur implicite du shell = caractère espacecaractère espace

Page 7: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : redirection des entrées-Shell : redirection des entrées-sortiessorties

EntréeEntréecommande > fichier commande > fichier commande 1> fichier commande 1> fichier

Associe le fichier au descripteur 1 (implicitement)Associe le fichier au descripteur 1 (implicitement)

commande 2> fichier # erreur redirigée vers fichiercommande 2> fichier # erreur redirigée vers fichier

commande >&2 commande >&2 # stdout associé à stderr # stdout associé à stderr

commande 2>&1 commande 2>&1 # stderr associé à stdout # stderr associé à stdout

Ex :Ex :commande 2>/dev/null 1>&2commande 2>/dev/null 1>&2

commande 1>/dev/null 2>&1commande 1>/dev/null 2>&1

Page 8: Shell Equipe ID Bioinformatics Training Course June 2014

ShellShell : saisie: saisie

Commande << EOFCommande << EOF# la commande lit l’entrée standard jusqu’à la # la commande lit l’entrée standard jusqu’à la

reconnaissance d’une ligne constituée de la chaîne reconnaissance d’une ligne constituée de la chaîne EOFEOF

Ex:Ex:Cat > compile << FINCat > compile << FINif [ $# -ne 2 ] ; then exit 1if [ $# -ne 2 ] ; then exit 1fifiif [ -r $1 ]if [ -r $1 ]

then cc $1 –o $2 -0 ; size $2then cc $1 –o $2 -0 ; size $2else exit 2else exit 2

fifiFIN FIN

Page 9: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : lecture de la valeur d’une Shell : lecture de la valeur d’une varaible dans un script shellvaraible dans un script shell

Lecture de la valeur d’une variable :Lecture de la valeur d’une variable :

read Variable1 …. Variablenread Variable1 …. Variablen

Val1 … ValnVal1 … Valn

Vali est liée à VariableiVali est liée à Variablei

Protection des variables Protection des variables préalablementpréalablement

readonly Variable1 …. Variablenreadonly Variable1 …. Variablen

Page 10: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : délimiteurs de chaines de Shell : délimiteurs de chaines de caractèrescaractères

''chainechaine' : la chaîne est prise littéralement ' : la chaîne est prise littéralement sans substitutionsans substitution

"chaine" : la chaîne est prise littéralement "chaine" : la chaîne est prise littéralement après substitution des caractères $ après substitution des caractères $ (évaluation des variables) et \.(évaluation des variables) et \.

‘‘commande`: la chaine complète est commande`: la chaine complète est remplacée par la valeur de la commande remplacée par la valeur de la commande (la sortie standard de celle-ci).(la sortie standard de celle-ci).

Page 11: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : délimiteurs de chaines de Shell : délimiteurs de chaines de caractères (exemple)caractères (exemple)

x=totox=totoecho $xecho $xtotototoecho echo ' ' $x$x ' '$x$xecho " echo " $x$x " " totototoX=pwdX=pwdecho $xecho $xpwdpwdecho " echo " $x = ‘$x`$x = ‘$x` «  « pwd=/usr/vous pwd=/usr/vous

Page 12: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : évaluation des variablesShell : évaluation des variables

$var : valeur de var; rien si var indéfinie$var : valeur de var; rien si var indéfinie ${var} : idem${var} : idem ${var:-val} : valeur de var si définie, val dans ${var:-val} : valeur de var si définie, val dans

le cas contraire; var inchangéele cas contraire; var inchangée ${var:=val} : valeur de var si définie, val dans ${var:=val} : valeur de var si définie, val dans

le cas contraire; var devient val si indéfiniele cas contraire; var devient val si indéfinie ${var:?message} : valeur de var si définie, ${var:?message} : valeur de var si définie,

sinon la valeur de message est affichée et le sinon la valeur de message est affichée et le shell se termineshell se termine

${var:+val} : valeur de var si définie, rien ${var:+val} : valeur de var si définie, rien sinon.sinon.

Page 13: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : visibilité des variablesShell : visibilité des variables

Les variables sont locales à un Les variables sont locales à un shellshell

Les variables du père ne sont pas Les variables du père ne sont pas implicitement transmises à ses fils implicitement transmises à ses fils (export)(export)

Le fils ne peut pas modifier les Le fils ne peut pas modifier les variables du père.variables du père.

Page 14: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : l’environnement de Shell : l’environnement de l’utilisateurl’utilisateur

Certaines variables sont initialisées Certaines variables sont initialisées au début de la session par le shell au début de la session par le shell lui-même qui exécute deux lui-même qui exécute deux commandes :commandes :

/etc/profile/etc/profile

$HOME/.profile (ou $HOME/.bashrc)$HOME/.profile (ou $HOME/.bashrc)

ENVENV

Page 15: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : principales variables Shell : principales variables d’environnementd’environnement

HOME : répertoire initialHOME : répertoire initial PATH : chemin de recherche des exe (login)PATH : chemin de recherche des exe (login) TERM : le type de terminalTERM : le type de terminal MAIL : la boite aux lettres MAIL : la boite aux lettres SHELL : le type de shellSHELL : le type de shell LOGNAME : nom de connexion LOGNAME : nom de connexion HISTSIZE : le nombre de lignes d’historiqueHISTSIZE : le nombre de lignes d’historique PWD : le répertoire courantPWD : le répertoire courant

Page 16: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : paramètres de procédureShell : paramètres de procédure

La valeur des paramètres est transmise à la La valeur des paramètres est transmise à la procédure de la façon suivante :procédure de la façon suivante :

$0 : le nom de la procédure$0 : le nom de la procédure$i : le ième paramètre$i : le ième paramètre$* : la liste de tous les paramètres$* : la liste de tous les paramètres$# : le nombre paramètres fournis à la $# : le nombre paramètres fournis à la

procédureprocédure Opérateurs liés aux paramètres :Opérateurs liés aux paramètres :shift[n] : décale de n positions vers la gauche la shift[n] : décale de n positions vers la gauche la

liste des paramètres et décrémente $# de nliste des paramètres et décrémente $# de nset paramètres : range de nouveaux paramètres set paramètres : range de nouveaux paramètres

dans l’environnementdans l’environnement

Page 17: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : paramètres de procédure Shell : paramètres de procédure (exemple)(exemple)

set ‘who am i`set ‘who am i`

echo echo ""Utilisateur : $1 Utilisateur : $1 ""

echo echo "" Terminal : $2 Terminal : $2 ""

echo echo "" Connexion : $4 $3 $5 Connexion : $4 $3 $5 ""

Page 18: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : caseShell : case

Le choix multiple : caseLe choix multiple : casecase <chaine> incase <chaine> in<constante>) <liste de commandes>;;<constante>) <liste de commandes>;;

<constante>) <liste de commandes>;;<constante>) <liste de commandes>;; … … esacesac

La constante peut-être de la forme :La constante peut-être de la forme :constante1| constante2 | … |constanteNconstante1| constante2 | … |constanteN

Page 19: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : case (exemple)Shell : case (exemple)

# la commande « qui » avec la date en français# la commande « qui » avec la date en françaisset ‘who am i`set ‘who am i`echo echo ""Utilisateur : $1 Utilisateur : $1 ""echo echo ""Terminal : $2 Terminal : $2 ""case $3 incase $3 in

Jan) m=Janvier;;Jan) m=Janvier;;Feb) m=Fevier;;Feb) m=Fevier;;……Dec) m=Decembre;;Dec) m=Decembre;;

esacesacecho " echo " Connexion : $4 $m $5 Connexion : $4 $m $5 ""

Page 20: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : forShell : for

for <var> in <chaine1> … <chaineN>for <var> in <chaine1> … <chaineN> do <liste de commandes>do <liste de commandes> donedone

for <var>for <var> do <liste de commandes>do <liste de commandes> donedone

for <var> in $*for <var> in $* do <liste de commandes>do <liste de commandes> donedone

Exemple : Exemple : #affichage des arguments de la ligne de commande#affichage des arguments de la ligne de commandefor arg in $*for arg in $*

do echo $argdo echo $argdonedone

Page 21: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : exprShell : expr

La commande expr :La commande expr :effectue des opérations sur les expressions passées en effectue des opérations sur les expressions passées en

paramètreparamètrechaque paramètre est une expression ou un opérateurchaque paramètre est une expression ou un opérateur

Opérations arithmétiques entre chaînes numériques :Opérations arithmétiques entre chaînes numériques :+ - / * %+ - / * %

Opérations de comparaions :Opérations de comparaions := != < > <= >== != < > <= >=

Sélection d’expressionSélection d’expressionexpr1 | expr2 vaut expr1 si non nul et n’est pas une chaine expr1 | expr2 vaut expr1 si non nul et n’est pas une chaine vide, expr2 sinonvide, expr2 sinonexpr1 & expr2 vaut expr1 si mes 2 expressions ne sont ni nulles expr1 & expr2 vaut expr1 si mes 2 expressions ne sont ni nulles ni vides, 0 sinonni vides, 0 sinon

Page 22: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : autres variablesShell : autres variables

Autres variables initialisées par le shellAutres variables initialisées par le shell$$ $$ numéro du processus courantnuméro du processus courant$!$! Numéro du dernier processus backgroundNuméro du dernier processus background$?$? Code retour de la dernière commande exécutéeCode retour de la dernière commande exécutée

Le code retour d’une liste de commande est le code retour de la Le code retour d’une liste de commande est le code retour de la dernière commande de la listedernière commande de la liste

0 : OK0 : OK!=0 : Problème!=0 : Problème

Ce code retour peut être utilisé dans les structures de contrôle à la Ce code retour peut être utilisé dans les structures de contrôle à la manière d’un booléenmanière d’un booléen

Initialisation explicite du code retour dans uns sipt shellInitialisation explicite du code retour dans uns sipt shellexit : le code retour de la procédure sera celui de la dernière commande exit : le code retour de la procédure sera celui de la dernière commande

exécutée avant exitexécutée avant exit

exit valeur : le code retour de la procédure sera valeurexit valeur : le code retour de la procédure sera valeur

Page 23: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : ifShell : if

L’alternative : ifL’alternative : ifif <expression>if <expression>

then <liste de commandes>then <liste de commandes>else <liste de commandes>else <liste de commandes>

fifi

Exemple :Exemple :if cc _0 *.cif cc _0 *.c

then pack *.cthen pack *.celse rm *.oelse rm *.o

fifi

Page 24: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : || et &&Shell : || et &&

Exécution conditionnelle : || et &&Exécution conditionnelle : || et &&Pour éviter l’usage explicite du ifPour éviter l’usage explicite du if

Exemple :Exemple :rm xxrm xxls –l xx || echo Echecls –l xx || echo Echecls –l xx && echo Reussitels –l xx && echo Reussiteecho Reussi || ls –l xxecho Reussi || ls –l xxecho Pas de la && ls –l xxecho Pas de la && ls –l xx

Page 25: Shell Equipe ID Bioinformatics Training Course June 2014

La commande testLa commande test

La commande test permet :La commande test permet :D’exprimer des conditions sur des fichiersD’exprimer des conditions sur des fichiersD’effectuer des comparaisonsD’effectuer des comparaisons

2 formes2 formesTest expressionTest expression[ expression ][ expression ]

Le résultat d’un test est 0 si la Le résultat d’un test est 0 si la condition est remplie et différente condition est remplie et différente sinon. En shell, 0 est équivalent à vraisinon. En shell, 0 est équivalent à vrai

Page 26: Shell Equipe ID Bioinformatics Training Course June 2014

La commande testLa commande test

Conditions sur des fichiersConditions sur des fichiersexpr option nomexpr option nomoption :option :

-f : vrai si nom est un fichier-f : vrai si nom est un fichier-d : vrai si nom est un répertoire-d : vrai si nom est un répertoire-r : vrai si nom est un fichier lisible-r : vrai si nom est un fichier lisible-w : vrai si nom est un fichier modifiable-w : vrai si nom est un fichier modifiable-x : vrai si nom est un fichier exécutable-x : vrai si nom est un fichier exécutable

Comparaison de chainesComparaison de chainesstring1 = string2string1 = string2 égalitéégalitéstring1 != string2string1 != string2 inégalitéinégalité-n string-n string vraie si longueur de string != 0vraie si longueur de string != 0

Page 27: Shell Equipe ID Bioinformatics Training Course June 2014

La commande testLa commande test

Comparaisons nmériquesComparaisons nmériquesn1 -eq n2n1 -eq n2 vrai si n1 = n2vrai si n1 = n2 -ne-ne vrai si n1 != n2vrai si n1 != n2

-lt-lt vrai si n1 < n2vrai si n1 < n2 -gt-gt vrai si n1 > n2vrai si n1 > n2 -ge -ge vrai si n1 >= n2vrai si n1 >= n2

Connecteurs logiquesConnecteurs logiques!! : non: non-a-a : and: and-o-o : or: or\( … \) : pour associer des expressions\( … \) : pour associer des expressions

Page 28: Shell Equipe ID Bioinformatics Training Course June 2014

Shell : while et untilShell : while et until

While : tant que la condition est vraieWhile : tant que la condition est vraiewhile <expression>while <expression>

do <liste de commandes>do <liste de commandes>DoneDone

Until : itération tant que la condition est Until : itération tant que la condition est faussefausse

until <expression>until <expression>do <liste de commandes>do <liste de commandes>

donedone