Shell Equipe ID Bioinformatics Training Course June 2014
zLe shell est le langage de commande standard du système UNIX zBourne shell zKorn shell zC-shell zBash-shell. Shell
$ more example.sh #!/bin/bash #!/bin/bash while true do cat somefile > /dev/null cat somefile > /dev/nullcat echo. echo.echo done File example.sh must have executable rights bash example.sh./example.sh Shell Scripts
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 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 Valeur : toujours une chaine de caractères Opérateur d’affectation : « = » Opérateur d’affectation : « = » Evaluation d’une variable : Evaluation d’une variable :$variable Affichage de la valeur d’une variable : Affichage de la valeur d’une variable : echo $variable
Shell : compléments syntaxiques Commentaire Commentaire # la fin de la ligne est ignorée Les commandes doivent être séparées par des retours chariot ou des points virgules Les commandes doivent être séparées par des retours chariot ou des points virgules Séparateur implicite du shell = caractère espace Séparateur implicite du shell = caractère espace
Shell : redirection des entrées-sorties Entrée 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 : Ex : commande 2>/dev/null 1>&2 commande 1>/dev/null 2>&1
Shell : saisie Commande << EOF Commande << EOF # la commande lit l’entrée standard jusqu’à la reconnaissance d’une ligne constituée de la chaîne EOF Ex: Ex: Cat > compile compile << FIN if [ $# -ne 2 ] ; then exit 1 fi if [ -r $1 ] then cc $1 –o $2 -0 ; size $2 else exit 2 fiFIN
Shell : lecture de la valeur d’une varaible dans un script shell Lecture de la valeur d’une variable : Lecture de la valeur d’une variable : read Variable1 …. Variablen Val1 … Valn Vali est liée à Variablei Protection des variables préalablement 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 sans substitution "chaine" : la chaîne est prise littéralement après substitution des caractères $ (évaluation des variables) et \. "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). ‘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 " totoX=pwd echo $x pwd echo " $x = ‘$x` « echo " $x = ‘$x` « pwd=/usr/vous
Shell : é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 le cas contraire; var inchangée ${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:=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:?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. ${var:+val} : valeur de var si définie, rien sinon.
Shell : visibilité des variables Les variables sont locales à un shell Les variables sont locales à un shell Les variables du père ne sont pas implicitement transmises à ses fils (export) Les variables du père ne sont pas implicitement transmises à ses fils (export) Le fils ne peut pas modifier les variables du père. 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 lui- même qui exécute deux commandes : Certaines variables sont initialisées au début de la session par le shell lui- même qui exécute deux commandes :/etc/profile $HOME/.profile (ou $HOME/.bashrc) $HOME/.profile (ou $HOME/.bashrc) ENV ENV
Shell : principales variables d’environnement HOME : répertoire initial HOME : répertoire initial PATH : chemin de recherche des exe (login) PATH : chemin de recherche des exe (login) TERM : le type de terminal TERM : le type de terminal MAIL : la boite aux lettres MAIL : la boite aux lettres SHELL : le type de shell SHELL : le type de shell LOGNAME : nom de connexion LOGNAME : nom de connexion HISTSIZE : le nombre de lignes d’historique HISTSIZE : le nombre de lignes d’historique PWD : le répertoire courant 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 : 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 : 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 Le choix multiple : case case in ) ;; ) ;; … esac 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 in … for in … do do done done for for do do done done for in $* do do done done Exemple : #affichage des arguments de la ligne de commande for arg in $* do echo $arg done
Shell : expr La commande 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 arithmétiques entre chaînes numériques : + - / * % Opérations de comparaions : Opérations de comparaions : = != = Sélection d’expression 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 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 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 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 L’alternative : if if if then then else else fi Exemple : if cc _0 *.c then pack *.c else rm *.o fi
Shell : || et && Exécution conditionnelle : || 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 : La commande test permet : D’exprimer des conditions sur des fichiers D’effectuer des comparaisons 2 formes 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 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 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 Comparaison de chaines string1 = string2égalité string1 != string2inégalité -n stringvraie si longueur de string != 0
La commande test Comparaisons nmériques Comparaisons nmériques n1 -eq n2vrai si n1 = n2 -nevrai si n1 != n2 -nevrai si n1 != n2 -ltvrai si n1 < n2 -ltvrai si n1 < n2 -gtvrai si n1 > n2 -gtvrai si n1 > n2 -ge vrai si n1 >= n2 -ge vrai si n1 >= n2 Connecteurs logiques Connecteurs logiques !: non -a: and -o: or \( … \) : pour associer des expressions
Shell : while et until While : tant que la condition est vraie While : tant que la condition est vraie while while do do Done Until : itération tant que la condition est fausse Until : itération tant que la condition est fausse until until do do done