Processus et scripts Plan du cours Le shell Contrôle des processus

Transcription

Processus et scripts Plan du cours Le shell Contrôle des processus
Processus et scripts
Jean-Sébastien Coron
Université du Luxembourg
Plan du cours
–
–
–
–
–
Contrôle des processus.
Les variables shell
Scripts simples.
Découpage de chaines.
Exécution conditionnelle.
Le shell
– Un shell est un programme qui lit et exécute les commandes
de l’utilisateur.
– Un shell permet aussi :
• De controler les processus.
• De rediriger l’entrée et/ou la sortie.
• D’écrire des scripts.
– Script shell:
• Fichier texte contenant une série de commandes.
• Comme fichier .bat sous MS-DOS.
– De nombreux shell existent:
• sh, bash, csh, tcsh.
1
Contrôle des processus
Contrôle des processus
– Le shell permet de contrôler les processus qui s’exécutent.
– Un processus s’exécute soit en foreground, soit en background.
– Foreground.
• Le processus reçoit les commandes du clavier et renvoie sa
sortie à l’écran.
• Un seul processus en foreground par shell.
• Peut être suspendu avec Ctrl-Z.
• Relancé en foreground par fg, en background par bg.
• Définitivement interrompu en tapant Ctrl-C.
Contrôle des processus
– Exécution d’un processus en background:
• On utilise le caractère &.
$ find -name hello.txt &
[1] 2812
$
• Cherche un fichier nommé hello.txt dans le répertoire
courant.
• Le processus s’exécute en tache de fond.
• 1 représente le numéro du processus s’exécutant en background. 2812 représente son PID.
– jobs permet d’avoir la liste de tous les processus en background.
Essayez la commande sleep 5.
1) Que fait cette commande ?
Exécutez cette commande en background.
2) Quelle est la commande à taper ?
Affichage des processus
– La commande ps permet d’avoir la liste des processus qui
$ ps
PID TTY TIME CMD
s’exécutent sur la machine. 2653 con 00:01:03 bash
3672 0
00:00:05 find
3687 0
00:00:00 ps
– Pour stopper un process, on utilise la commande kill.
• kill 3672 stoppe l’exécution de la commande find.
Exécutez sleep 100 en foreground, suspendez cette tache et faites continuer son exécution
en background. Affichez la liste des processus en background. Affichez la liste de tous les
processus.
3) Quelles sont les commandes à taper et quel est le résultat obtenu pour chacune des commandes ?
Exécutez sleep 100 en background, et utilisez la commande kill pour faire stopper le
processus.
4) Quelle est la commande à taper ?
Il est possible de combiner plusieurs commandes sur une même ligne de commande en
utilisant les opérateurs ;, && et ||. Essayez de combiner les commandes cat file (pour un
fichier file qui n’existe pas) et echo bonjour en utilisant chacun des 3 opérateurs. Inversez
l’ordre des commandes et essayez une nouvelle fois avec les 3 opérateurs.
5) Selon quelles règles les commandes sont-elles exécutées pour chacun des 3 opérateurs ?
2
Les variables shell
– Une variable est une donnée identifiée par un nom.
– On accède au contenu d’une variable en ajoutant $.
$ var=’hello world’
$ echo $var
hello world
– Pour qu’une variable soit visible en dehors du shell, il faut
l’exporter vers l’environnement.
• export var.
• Exemple: la variable PAGER est utilisée par man pour
déterminer comment afficher le texte.
∗ export PAGER=cat: tout s’affiche à la fois.
∗ export PAGER=less: page par page.
La variable PATH
– Variable d’environnement qui donne la liste des répertoires
que le shell recherche pour exécuter des commandes.
• Si PATH contient /bin/:/usr/bin:/usr/local/bin:.
• alors pour la commande cat, le shell va chercher
/bin/cat, /usr/bin/cat,...
– Si le PATH contient ”.”, alors il cherche aussi dans le répertoire
courant.
• On peut taper macommande au lieu de ./macommande.
• PATH=$PATH:.
Evaluation des variables
– Le shell substitue les valeurs des variables dans un texte avant
son évaluation.
– Pour modifier l’évaluation, on peut utiliser ”” ou ”.
– Les guillemets ””:
• Permet de grouper des mots, supprime le remplacement
des méta-caractères, sans supprimer le remplacement des
variables.
• x=hello world
world: command not found.
• x="hello world" est correct.
• y="phrase=$x"; echo $y
phrase=hello world.
3
Les quotes ’ ’
– Les quotes ’ ’
• Groupent les mots et suppriment toute évaluation.
– Exemple:
• $ y=hello
$ ls
fich1 fich2
$ echo le caractère * $y
le caractère fich1 fich2 hello
$ echo "le caractère * $y"
le caractère * hello
$ echo ’le caractère * $y’
le caractère * $y
Evaluation des commandes
– Les back-quotes (‘) permettent de substituer le résultat d’une
commande.
• $ echo the date is ‘date‘
the date is Tue Nov 17 15:01:44 2004
– On peut stocker le résultat d’une commande dans une variable.
• $ x=‘ls‘
$ echo $x
fich1 fich2
• Equivalent: $ x=$(ls)
Découpage des chemins
– Les commandes dirname et basename sont utiles pour
découper un chemin en répertoire/nom de fichier.
– $ dirname /vers/mon/rep/fich.txt
/vers/mon/rep
– $ basename /vers/mon/rep/fich.txt
fich.txt
2
Les scripts shell
Les scripts shell
– Un script shell est un fichier texte contenant des commandes
du shell.
– Permet l’automatisation des taches.
4
Un script simple
– Soit le script suivant dans le fichier simple
#!/bin/bash
# commentaire
echo ”Le nombre d’argument est $#”
echo ”Les arguments sont $*”
echo ”Le premier est $1”
echo ”Le numéro du process est $$”
echo ”Entrez un nombre:”
read nombre
echo ”Le nombre entré est $nombre”
– Pour exécuter le script, il faut rendre le fichier simple
exécutable (chmod).
Implémentez le script simple décrit dans le cours. Utilisez un pipe pour faire afficher par
le script ”le nombre que vous avez entré est 5” sans que l’utilisateur ne tape de nombre au
clavier.
6) Quelle est la commande à utiliser ?
3
Découpage des chaines
Découpage des chaines
– Les caractères ## permettent d’éliminer la plus grande chaı̂ne
en correspondance avec le motif, en partant du début.
• $ x=’babar’
$ echo ${x##*ba}
r
• $ y=’hello.txt’
$ echo ${y##*.}
txt
– Le caractère # élimine la plus courte.
• $ x=’babar’
$ echo ${x#*ba}
bar
Découpage des chaı̂nes
– % élimine la plus courte correspondance en partant de la fin,
et %% élimine la plus longue.
• $ y=’hello.tar.gz’
echo ${y%.*}
hello.tar
• $ y=’hello.tar.gz’
echo ${y%%.*}
hello
5
Découpage des chaı̂nes
– ${string:position}
• Extrait la sous-chaı̂ne de string à partir de $position.
• $ y=’bonjour’
echo ${y:3}
jour
– ${string:position:length}
• Extrait $length caractères de la sous-chaı̂ne de string à
partir de $position.
• $ y=’bonjour’
echo ${y:3:2}
jo
La commande cut
– La commande cut
• Permet de sélectionner certaines parties des lignes d’un
fichier ou de l’entrée standard (si aucun fichier n’est
précisé).
• cut [-c] [-f] list [-n] [-d delim] [-s] [file]
– Options:
• -c list: spécifie les caractères à sélectionner.
∗ -c2-5 sélectionne les caractères 2 à 5 de chaque ligne.
La commande cut
– Options:
• -f list: sélectionne pour chaque ligne les champs
spécifiés, les champs étant délimités par un caractère
délimiteur.
∗ -f1,5 sélectionne les champs 1 et 5.
• -d delim: spécifie le caractère délimiteur.
• -s: supprime les lignes sans caractère délimiteur.
– list:
• Liste de nombres séparés par une virgule, avec - pour indiquer un intervalle.
• 1,2,3,5 ou 1-3,5
Exemples
– Exemples:
• $ echo "hello" | cut -c 2-4
ell
• $ echo "he ll o wo" | cut -f2,3 -d’ ’
ll o
On souhaite écrire un script taille permettant d’afficher la taille d’un fichier de la façon
suivante:
$ ls -l monfich.c
-rw-r--r-1 guest None
60 Oct 14 11:44
6
monfich.c
$ taille monfich.c
60
La commande cut permet de sélectionner certaines parties des lignes d’un fichier ou de
l’entrée standard (si aucun fichier n’est spécifié). Par exemple, la commande cut -c 2-5
fich sélectionne les caractères 2 à 5 de chacune des lignes du fichier fich.
$ echo "hello" | cut -c 2-4
ell
En combinant les commandes ls -l et cut avec un pipe, on peut donc sélectionner dans
le résultat de la commande ls -l les caractères correspondants à la taille du fichier.
7) Quelle est la commande à taper pour afficher seulement la taille d’un fichier donné (par
exemple, toto.c) ?
Le problème est qu’il reste des espaces à éliminer avant le résultat lui-même: au lieu
d’avoir:
$ commande
60
on voudrait avoir:
$ commande
60
La commande tr -d ’ ’ permet d’éliminer les espaces d’une chaı̂ne de caractère en
entrée.
$ echo "un deux trois" | tr -d ’ ’
undeuxtrois
8) Quelle est la commande à taper (combinant ls -l, cut et tr) permettant d’obtenir le
résultat voulu ?
9) Ecrire un script taille prenant en entrée un fichier et affichant sa taille, comme dans
l’exemple donné au début.
4
Exécution conditionelle
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
7
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
Ecrire un script existe qui détermine si un fichier existe ou pas.
$ existe toto
Le fichier toto existe
$ existe tata
Le fichier tata n’existe pas
8

Documents pareils