Scripts shell Scripts shell Execution conditionnelle Conditions sur
Transcription
Scripts shell Scripts shell Execution conditionnelle Conditions sur
Scripts shell Jean-Sébastien Coron Université du Luxembourg Scripts shell – Un script shell est un fichier qui contient une liste de commandes. • En exécutant le fichier, ces commandes sont exécutées automatiquement. • Utile pour automatiser des taches répétitives. – Nouvelles instructions: • Instruction if: exécution conditionnelle. • Instruction for: répétition d’une suite d’instructions. 1 Exécution conditionnelle Execution conditionnelle – Il est possible d’exécuter une suite d’instruction sous une certaine condition. • if [ test ] then commande-si-vrai else commande-si-faux fi – Le test peut être une condition sur un fichier, ou une comparaison de chaine ou de valeur. • Ne pas oublier les espaces dans if [ test ] then Conditions sur les fichiers – – – – – – [ [ [ [ [ [ -s -f -d -r -w -x file file file file file file ]: ]: ]: ]: ]: ]: vrai vrai vrai vrai vrai vrai si si si si si si le fichier existe et est non vide. c’est un fichier ordinaire. c’est un répertoire. le fichier est libre en lecture. le fichier est libre en écriture. le fichier est exécutable. Exemple – Afficher le contenu d’un fichier s’il existe. • #!/bin/bash if [ -f $1 ] then cat $1 fi – Créer un répertoire toto s’il n’existe pas déjà. • #!/bin/bash if [ ! -d toto ] then mkdir toto fi Comparison de valeurs et chaines – Entiers • [ $X -eq $y ]: vrai si X=Y. • [ $X -ne $Y ]: vrai si X¡¿Y. • [ $X -lt $Y ]: vrai si X¡Y. • [ $X -le $Y ]: vrai si X¡=Y. – Chaı̂ne: • [ "$A" = "$B" ]: vrai si chaine A = chaine B. • [ "$A" != "$B" ]: vrai si chaine A ¡¿ chaine B. Exemple – Script pos déterminant si un nombre est positif. • #!/bin/bash if [ $1 -gt 0 ] then echo "$1 est positif" fi • $ pos 2 2 est positif 2 Exemple – Script quitter demandant si l’utisateur veut quitter. • #!/bin/bash echo "Voulez vous quitter ?" read rep if [ "$rep" = y ] then echo "exiting..." exit 0 fi • $ quitter Voulez-vous quitter ? y exiting... $ Exemple – Script fichtxt déterminant si un fichier a l’extension .txt • #!/bin/bash if [ "${1##*.}" = "txt" ] then echo $1 est un fichier .txt else echo $1 n’est pas un fichier .txt fi • $ fichtxt toto.txt toto.txt est un fichier .txt Combinaison de tests – Expressions: • [ $E -a $F ]: vrai si les expressions E et F sont vraies. • [ $E -o $F ]: vrai si E ou F est vraie. – Example: script demandant une valeur en 0 et 100. • #!/bin/bash if [ \( $1 -gt 100 \) -o \( $1 -lt 0 \) ] then echo "out of range" fi 2 Liste des processus La commande ps -s permet d’afficher la liste des processus qui s’exécutent sur une machine. 1) Donnez le résultat de la commande ps -s. Pour cela, stockez le résultat de la commande ps -s dans un fichier temporaire (par exemple temp), et copiez le contenu de temp à l’aide d’un éditeur de texte. Quelle commande faut-il taper ? 3 La commande grep permet de sélectionner les lignes d’un fichier (ou de l’entrée standard si aucun fichier n’est spécifié) qui contiennent un certain motif. Par exemple, $ ls -l | grep ’toto’ affiche uniquement les lignes du résultat de la commande ls -l qui contiennent le mot toto. En combinant les commandes ps -s et grep à l’aide d’un pipe, on peut donc sélectionner les lignes qui correspondent à un nom de processus donné. 2) Quelle est la commande à taper pour faire afficher uniquement les lignes du résultat de la commande ps -s qui correspondent au programme bash ? La commande cut permet de sélectionner un certain groupe de caractères pour chaque ligne d’un fichier (ou de l’entrée standard si aucun fichier n’est spécifié). En combinant les commandes précédentes avec la commande cut, on peut donc sélectionner pour chaque ligne uniquement le numéro du processus (son PID). 3) Quelle est la commande à taper pour faire afficher la liste des numéros de processus correspondant au programme bash ? 4) Ecrivez un script shell pidof prenant en entrée le nom d’un programme et affichant la liste les numéros de processus correspondant à ce programme. $ pidof bash 1672 2888 $ pidof xterm 1025 2112 3 Boucle for Boucle for – La boucle for permet d’exécuter une suite d’instruction avec une variable parcourant une suite de valeurs. • for variable in list do statement done – La liste peut être un ensemble de fichier. • for x in *.txt do statement done 4 Boucle for – Exemple: • Le script: for x in chien chat canard do echo "x=$x" done • Affiche: x=chien x=chat x=canard Traitement de fichier – La boucle for permet d’appliquer la même suite d’instruction à un ensemble de fichiers: • for fichier in * do if [ -d "$fichier" ] then echo "$fichier: répertoire" fi done • Affiche la liste des répertoires dans le répertoire courant. 4 Liste des fichiers Ecrire un script list qui donne la liste des fichiers dans le répertoire courant, suivi des répertoires. La sortie devra avoir la forme suivante: Fichiers: --------filename Répertoires: -----------directories 5