280 likes | 595 Views
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
E N D
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 lui-mê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 égalité string1 != string2 inégalité -n string vraie si longueur de string != 0
La commande test • Comparaisons nmériques n1 -eq n2 vrai si n1 = n2 -ne vrai si n1 != n2 -lt vrai si n1 < n2 -gt vrai si n1 > n2 -ge vrai si n1 >= 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