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 inu tile de spécifier le ‘./’ . #!/bin/bash # script bonjour.sh echo Bonjour $USER echo « Aujourdhui nous so mmes 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 q uelconque 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),

Les Scripts Shell

Embed Size (px)

Citation preview

Page 1: 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),

Page 2: Les Scripts Shell

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

Page 3: Les Scripts Shell

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

Page 4: Les Scripts Shell

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

Page 5: Les Scripts Shell

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

Page 6: Les Scripts Shell

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 

;;

Page 7: Les Scripts Shell

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

Page 8: Les Scripts Shell

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

Page 9: Les Scripts Shell

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

Page 10: Les Scripts Shell

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)

Page 11: Les Scripts Shell

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

:écriture

Page 12: Les Scripts Shell

8/6/2019 Les Scripts Shell

http://slidepdf.com/reader/full/les-scripts-shell 12/12

Scripts Shell et commandes Linux

12/12

:

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