L'inscription des usagers. Les objets et leurs scripts. Par Jérôme Denis.
Les Scripts Shell
Transcript of Les Scripts Shell
8/6/2019 Les Scripts Shell
http://slidepdf.com/reader/full/les-scripts-shell 1/12
Scripts Shell et commandes Linux
1/12
Les scripts Shell
Un script shell ou fichier de commandes est un fichier texte qui continet
des commandes du shell, qui seront éxécutées de manière non intéractive.
La toute première ligne du fichier doit contenir le nom de l’interpréteur à
utiliser (cela est valable pour tous les langages de script). Cette ligne doit
commencer par #! (SHEBANG!) suivi de l’exécutable à utiliser pour lancer le
shell.
Pour un script bash , on aura donc en début de fichier en général :
#! /bin/bash
# commentaire de debut du script
commandes bash…
Pour exécuter un script on l’appelle simplement par son nom, mais il y a 2
conditions à satisfaire :
le script doit être ‘exécutable’ par celui qui le lance
le script doit être dans le chemin d’exécution ou son chemin
spécifié complètement
Voici un exemple de création et d’exécution de script simple :
$> vi nettoie_tmp.sh
#! /bin/bash
cd /home/dd/tmp
rm -R *
echo « nettoyage fini ! »
<esc>:wq
note : si le répertoire courant de l’utilisateur est dans le PATH il est inutile
de spécifier le ‘./’ .
#!/bin/bash
# script bonjour.sh
echo Bonjour $USER
echo « Aujourdhui nous sommes le » ; date
echo « et il va falloir se mettre au Shell !! »
Entrées-sorties
Pour afficher on utilise la commande ‘echo’ …de la facon suivante :
echo « un texte quelconque entre guillemets »
note : le texte sera suivi automatiquement par un saut de ligne.
On peut utiliser des caractères spéciaux habituels, qui seront interprétés
seulement avec l’option -e.
Rappel des caractères spéciaux :
\n (saut ligne),
8/6/2019 Les Scripts Shell
http://slidepdf.com/reader/full/les-scripts-shell 2/12
Scripts Shell et commandes Linux
2/12
\b retour arrière),
\t (tabulation),
\a (alarme),
\c (fin sans saut de ligne)
exemple
echo « Bonjour \nMesdames ! »
echo -e « Bonjour \nMesdames ! »
echo -e « Bonjour \nMesdames, \Mesdemoiselles et Messieurs \c »
Pour lire une valeur au clavier et la ranger dans une variable, on utilise
‘read’.
Et ce de la façon suivante :
read var1 var2 …
Voici un exemple
echo « Saisissez votre civilité »
read civil
echo « Saisissez a la suite vos prénom et votre nom »
read prenom nom
echo « Bonjour $civil $prenom $nom »
Comment afficher le résultat d’une commande ?
echo ls ou echo « ls » donnent le même résultat…ils affichent le mot ‘ls’.
On utilisera le caractère magique anticote ou cote inversée (en général
sous la touche ’7′ d’un clavier Francais) pour encadrer la commande :
exercice : écrire un script qui utilise ‘echo’ et qui écrit ‘ls’, fait une pause
en attendant une saisie utilisateur et execute un ls (toujours dans un
‘echo’)
Variables et paramètres d’un script
Rappel : les variables du shell sont définis par leur nom, initialisé par un
‘=’ (sans espace) et référencées par un caratère ‘$’ qui permet d’évaluer…
leur valeur. Il en va de même pour les scripts.
X=12
c= »Salut les gars »
echo $X
echo $c
note : lorsque le nom de la variable peut être ambigu, on utilise les
accolades pour lever l’ambiguité :
x=a
y=b
xy=cd
echo $xy
8/6/2019 Les Scripts Shell
http://slidepdf.com/reader/full/les-scripts-shell 3/12
Scripts Shell et commandes Linux
3/12
cd
echo ${x}y
ay
echo ${xy}
cd
Il existe un certain nombre de variables prédéfinies plus spécialement
utiles aux scripts. Voici les principales :
$0 : le nom du script
$1 à $9 : les paramètres éventuels passés au script
$# : le nombre de paramètres passés au script
$* : la liste des arguments à partir de $1
$? : la sortie de la dernière (0 = succès)
$$ : le n° PID du processus courant
$! : le n° PID du processus fils
Voici qq exemples :
$> vi compte.sh
# compte les fichiers d’un certain type dans le répertoire cible
# compte.sh utilise 2 parametres
# $1 : le répertoire cible# $2 : le type d’extension de fichiers recherchés
# on se place dans le répertoire
cd $1
# et on compte les fichiers !
ls *.$2 |wc
<esc>:wx
$> ./compte.sh /var/log log
13 13 150
$> cd /
$> echo $?
0
$> touch essai
Can’t touch ‘essai’ : permission denied
$> echo $?
1
Note : au delà de 10 paramètres on peut utiliser la commande ‘shift’ .
Après un ‘shift’ $1 prend la valeur de $2, …, $9 prend la valeur de $10
exercice : faire la somme des neuvième et dixième paramètre d’un script.
(truc : utiliser ‘expr’ pour faire effectivement le calcul)
Les fonctions
Pour structurer et réutiliser son code comme dans tout langage, on peut
utiliser des fonctions.
On déclare la fonction avec le mot réservé ‘function’ et on l’exécute en
8/6/2019 Les Scripts Shell
http://slidepdf.com/reader/full/les-scripts-shell 4/12
Scripts Shell et commandes Linux
4/12
référençant son nom. Les paramètres éventuels sont passés sans
parenthèses.
# def fonction
function nom_fonction
{instructions
}
# appel fonction sans parametre
nom_fonction
# appel fontion avec paramètres
nom_fonction paramètre
Les fonctions retournent un statut d’exécution (OK ou HS) respectivement
0 ou !=0. Il est accessible par ‘$?’
Les fonctions peuvent retourner une valeur numérique (<255) grace au
mot réservé ‘return’
Des exemples :
# test fonctions
#
function titre {
# il n’y a a pas de parametre…
echo « un titre quelconque »
}
function affiche
{
# $1 est le 1er parametre de la fonction
echo $1
}
# appel sans param
titre
# appel et passage par valeur
affiche bonjour
politesse= « mon cher »
# on met des « » pour prendre les 2 mots de la chaine…
# passage par adresse
affiche « $politesse »
# $1 est le 1er parametre du Shell (s’il y en a…)
echo $1
La Structure if
Permet d’orienter le contrôle du programme suivant la valeur logique d’une
expression. C’est une alternative. Au lieu de continuer à s’exécuter
séquentiellement, si l’expression est vraie on va exécuter telle partie du
programme, sinon telle autre.
Un if a la forme suivante :
if instructions
then
8/6/2019 Les Scripts Shell
http://slidepdf.com/reader/full/les-scripts-shell 5/12
Scripts Shell et commandes Linux
5/12
#1er bloc d’instructions
else
#2nd bloc d’instructions
fi
Le nombre d’alternatives n’est pas limité
Alternatives imbriquées :
if condition1
then instruction1
instruction2
……….
elif condition2
then instruction3
instruction4
……..
elif condition3
then instruction5
instruction6
……..
fi
then elif else doivent figurer sur une nouve lle ligne (ou être précédés de ‘;’)
Les conditions Logiques
Testées soit par la commande ‘test’ soit par placement de l’expression
entre [] :
test expression
[ expression ] # attention aux ‘espaces’ !!!!!
Nous allons passer en revue les différents opérateurs utilisables dans les
conditions logiques. Il en existe pour chaque type d’opérande (chaines de
caractères, entiers, fichiers)
tests de chaines
s1 = s2 ( égalité ? )
s1 != s2 ( s1 différente de s2 ? )
s1 (chaine s1 non vide ? )
-z s1 (chaine s1 vide ? )
test d’Entiers
n1 -eq n2 ( ‘eq’ veut dire ‘equals’ on teste donc si n1==n2)
n1 -ne n2 ( ‘ne’ veut dire ‘not equals’ on teste donc si n1 != n2)
n1 -gt n2 ‘gt’ veut dire ‘greater than ou plus grand que ‘ on teste donc si
8/6/2019 Les Scripts Shell
http://slidepdf.com/reader/full/les-scripts-shell 6/12
Scripts Shell et commandes Linux
6/12
n1 > n2)
n1 -lt n2 ( ‘lt’ veut dire ‘less than’ ou ‘plus petit que’ on teste donc si n1
< n2)
n1 -ge n2 ( ‘ge’ veut dire ‘greater or equal’ ou ‘supérieur ou égal’ on
teste donc si n1 >= n2)
n1 -le n2 ( ‘le’ veut dire ‘less or equal’ ou ‘inférieur ou égal’ on teste doncsi n1 <= n2)
test de Fichiers
-r fich (‘r’ = ‘readable’ , fichier fich lisible ? )
-w fich (‘w’ = ‘writable’ , fichier fich modifiable ? )
-x fich (‘x’ = ‘eXecutable’ , fichier fich exécutable ? )
-f fich (‘f’ = ‘file’ : fich fichier ordinaire ? )
-d fich (‘d’ = ‘directory’ , fich est un répertoire ? )
-s fich (fich fichier non vide ? )
Combinaisons logiques d’expression
expr1 -o expr2 (expr1 ou expr2)
expr1 -a expr2 (expr1 et expr2)
§ expression (négation de expr1)
Quelques exemples
# si la note est > 15…
if [ $note -gt 15 ]
then echo « Très bien ! »
fi
# Avant d’exécuter un script, on peut s’assurer qu’il existe
if [ -f ~/.bashrc ]
then
. /.bashrc
fi
La Structure case
Permet de comparer une expression plusieurs autres expressions
constantes ou comportant des caractères spéciaux pour le shell (?, *, []) :
case $variable in
valeur1)
#1er bloc d’instructions
;;
valeur2)
#2ème bloc d’instructions
;;
valeur3)
#3ème bloc d’instructions
;;
8/6/2019 Les Scripts Shell
http://slidepdf.com/reader/full/les-scripts-shell 7/12
Scripts Shell et commandes Linux
7/12
*)
#Traitement des autres valeurs
;;
esac
Une pseudo clause « default« est possible en donnant à la dernière forme
la valeur ‘*’
La Boucle for
Itérer l’exécution d’un groupe de commandes avec un paramètre prenant
ses valeurs successives dans une liste
for variable in liste_de_valeurs
do# Traitement à répéter
done
do et done doivent être sur une nouvelle ligne (ou précédés d’un ‘;’)
$> une simple boucle
$> # on ne fait pas un script…
$> # on enchaine les commandes
$> for i in 1 2 3 4
> do
> echo $i
> done
1
2
3
4
$>
for util in /home/*
do
echo « bonjour utilisateur $util »
done
La Boucle while
Permet de boucler tant qu’une expression renvoie la valeur Vrai :
while instructions
do
# instructions à répéter
done
1 do et done doivent être sur une nouvelle ligne (ou précédés de ‘;’)
while who | grep -s stage3
do
8/6/2019 Les Scripts Shell
http://slidepdf.com/reader/full/les-scripts-shell 8/12
Scripts Shell et commandes Linux
8/12
echo $G
sleep 300
done &
Interruptions
Il est possible d’interrompre plus ou moins violemment (en continuant ou
pas le programme ou le shell…)
break : interrompt l’exécution et reprend l’instruction qui suit la boucle
return : interrompt l’exécution et sort du scr ipt en cours
exit : interrompt l’exécution et retourne au niveau du SHELL appelant
Les commandes Linux
Consulter le manuel
man [n] commande
Visualisation à l'écran des informations concernant la commande spécifiée.
L'affichage est realisé par un more.
Le manuel est divisé en huit sections:
1 : Les commandes utilisateurs
2 : Les appels sytèmes
3 : La librairie des sous-routines
4 : Les formats de fichiers
5 : Les fichiers spéciaux
7 : Les possibilités diverses
8 ou 1m : Les commandes d'administrations système
9 : glossaire
On peut spécifier la section dans laquelle on veut effectuer la recherche
(grace au paramètre n).
Identifier les utilisateurs du système
who
fournit de informations sur l'ensemble des utilistaeurs qui sont
actuellement connectés sur la station.
who am i
renvoie uniquement les informations relatives à l'utilisateur
courant.
whoami
renvoit l'identificateur de l'utilisateur courant.
id
renvoie l'UID (user identifier), le GID (Groupe identifier) de
l'utilisateur courant.
Il ne faut pas confondre who am i (cas particulier de la commande who) et
whoami. Le premier donne des informations sur l'utilisateur connecté et le
second l'identificateur de l'utilisateur courant.
Changer de mot de passe
Pour se connecter, il faut :
un login (identificateur de l'utilisateur) assigné par votre
administrateur système
un password (mot de passe) propre à chaque utilisateur
8/6/2019 Les Scripts Shell
http://slidepdf.com/reader/full/les-scripts-shell 9/12
Scripts Shell et commandes Linux
9/12
passwd
Permet de définir et de controler son mot de passe.
A l'appel de cette commande, vous devez saisir l'ancien mot de
passe, puis vous devez saisir deux fois votre nouveau mot de
passe.
Afficher une chaine de caractères
echo chaine
affiche la chaine passée en paramètre .(vous pouvez aussi afficher
des variables: echo $PATH, pour visualiser la variable PATH)
banner chaine
affiche la chaine passée en paramètre avec des grosses lettres
Commandes et manipulation des répertoires
Visualiser le contenu d'une répertoire
ls [-FaRl]
liste le contenu d'un répertoire quelques options :
-F
:
Positionne à la fin des noms un / pour les répertoires et un *
pour les fichiers exécutables
-a
:
Affiche tous les fichiers, y compris les fichiers cachés (ceux qui
commencent par . )
-R
:Affichage récursif
-l :
Description complète du contenu d'un répertoire (une ligne par
fichier). Le premier caractère de la ligne indique le type dufichier :
- : standard
d : répertoire
-d
:
Evite de lister le contenu d'un répertoire : si rep est un
repertoire, ls -l rep listera le contenu du répertoire rep, alors
que ls -ld rep listera la description du répertoire
changer de répertoire
cd chemin
change le répertoire courant pour celui specifié par le chemin.
cd
change le répertoire courant pour le home directory.
cd -
change le répertoire courant pour le répertoire précédent
pwd
(print working directory) affiche le chemin du répertoire courant
Créer et détruire un répertoire
mkdir répertoire
création d'un répertoire contenant les deux fichiers . et ..
rmdir répertoire
supprime un répertoire vide (pour supprimer un répertoire non
vide, il faut utiliser la commande rm
Commandes et manipulation des fichiers
Visualier le contenu d'un fichier
cat fich1 fich2
concatène et affiche (sur la sortie standard) le contenu des fichiers
paste fich1 fich 2
8/6/2019 Les Scripts Shell
http://slidepdf.com/reader/full/les-scripts-shell 10/12
Scripts Shell et commandes Linux
10/12
concatène horizontalement les fichiers fich1 et fich2 et affiche (sur
la sortie standard) le résultat.
more fich
visualise le contenu du ou des fichiers par page.
pour un fichier contenant plus d'une page :
q ou Q : pour terminer la visualisation
RETURN : pour visualiser une ligne supplémentaire
ESPACE : pour visualiser la page suivante
h : pour obtenir de l'aide
Imprimer un fichier
lp [-dimp] fichiers
imprime le ou les fichiers spécifiés sur l'imprimante par défaut ou
sur celle spécifiée par l'option -d (attention, pas de blanc entre
l'option et le nom de l'imprimante).
lpq
visualise la file d'impression courante
lpstat [-t]
renvoie des informations sur l'etat de l'imprimante par défaut et de
sa queue d'impression . (l'option -t permet de visualiser toutes les
imprimantes)
cancel num_impression
detruit l'impression designée par num_impression(vous recuperz
ce numero par la commande lpq ou lpstat)
Chercher une chaine de caractères dans un fichier
grep [-iv] expression fichiers
sans
option :
recherche dans les fichiers les lignes contenant
l'expression
-i :pour ne pas tenir compte des
majuscules/minuscules
-v :pour afficher les lignes ne contenant pas
l'expression spécifiée.
Faire une copie d'un fichier
cp source destination
copie le fichier source dans le fichier destination.
Si le fichierdestination n'existe pas, il est créé . Sinon son contenu
est ecrasé sans avertissement.
Si la destination est un répertoire, alors la source peut être une
liste de fichiers.
Déplacer ou changer le nom d'un fichier
mv source destination
renomme ou deplace le fichier source en destination. Si la
destination est un répertoire, alors la source peut être une liste de
fichiers.
Identifier le type d'un fichier
file fichiersDétermine le type du ou des fichiers spécifiés. (Attention, le
résultat est parfois erronée)
8/6/2019 Les Scripts Shell
http://slidepdf.com/reader/full/les-scripts-shell 11/12
Scripts Shell et commandes Linux
11/12
Créer un lien sur un fichier
ln [-s] source destination
création un lien sur un fichier ou un répertoire. Un lien est un
moyen d'accéder à un même fichier ou un répertoire sous plusieurs
noms ou à partir de plusieurs répertoires. Attention un lien n'est
pas une copie: si vous modifiez le fichier alors tous les liens sur ce
fichier seront modifiés.
Il existe deux sortes de liens: le lien physique et le lien symbolique
(avec l'option -s). Le lien physique ne peut adresser que des
fichiers, alors que le lien symbolique peut aussi lier des
répertoires.
Dans le cas de lien physique, pour effacer le fichier, vous devez
effacer tous les liens qui pointent sur ce fichier. Par contre pour
des liens symboliques, vous pouvez effacer le fichier sans effacer
les liens, mais alors ceux-ci seront invalides.
Détruire un fichier
rm [-irf] fichiers
efface les fichiers(attention, on ne peut pas récuperer un fichier quia été effacé)
-i :intéractif, demande une confirmation sur chaque
fichier
-f
:force la suppression du fichier
-r
:
resursivité. permet d'effacer un répertoire et son
contenu
Rechercher un fichier
find rep -name nom -print
recherche le(s) fichier(s) caractérisé par name (vous pouvez utiliser
une expression régulière), à partir du répertoire rep et affiche le
résultat.
vous pouvez décrire le fichier à rechercher par une expression
réguliere, ou indiquer le type de fichiers à chercher ou encore le
propriétaire ...
vous pouvez aussi executer d'autres actions, comme effacer le
fichiers... (pour plus de détails, voir le man)
Permission sur les fichiers
Pour chaque fichier, il y a trois classes d'utilisateurs
utilisateur : le propriétaire du fichier
groupe : le groupe auquel appartient le fichier
autre : tous les autres
Les permissions accordées à ces trois classes sont :
r : lecture
w
:écriture
8/6/2019 Les Scripts Shell
http://slidepdf.com/reader/full/les-scripts-shell 12/12
Scripts Shell et commandes Linux
12/12
x
:
exécution (pour un fichier, peut être executé, pour un
répertoire, peut devenir répertoire courant)
chmod mode fichiers
change les permissions du ou des fichiers/répertoires.
exemple mode désiré : rwxr-xr--
user group other
rwx r-x r--
111 101 100 en binaire
7 5 4
d'ou la commande chmod 754 fichier
chown proprietaire fichiers
change le propriétaire du fichier. Le nouveau propriétaire doit être
connu du système.
chgrp groupe fichiers
change le groupe du fichier. Le nouveau groupe doit être connu du
système.
Divers
Se connecter sur un autre compte
su [-] utilisateur
change l'utilisateur courant . Vous devez saisir le mot de passe du
nouvel utilisateur (sauf si le compte d'origine est le root).
Si vous indiquez - alors les fichiers de login (.cshrc ou autre
suivant le shell) sont exécutés et vous vous retrouvez dans le home
directory du nouveau compte.
Se connecter sur une autre station
rlogin station
vous êtes connecte sue une autre station mais avec le meme login .
Vous devez saisir le mot de passe sur la nouvelle station(sauf si
vous positionner le fichier .rhosts). Si vous ne saisissez pas le mot
de passe, vous pouvez alors changer de compte.
Surveiller les programmes en cours d'execution
ps
affiche la liste des processus actifs. Attention les options de cette
commande change suivant le système que vous avez, (verifiez les
par le man)
Tuer un processus
kill num_process
supprime le processus specifié (vous recuperez le numéro du
processus par un ps). Si malgré la commande, le processus n'est
pas détruit, essayez kill -9 num_process
Redirection des entrées-sorties
< l'entrée standard est lu à partir d'un fichier
> La sortie standard est redirigée dans un fichier (RAZ du fichier)
>>La sortie standard est redirigée dans un fichier (concaténation du
fichier)
La redirection des erreurs dépend du shell dans lequel vous êtes, soit sh ,
soit ksh ou encore csh