Vous êtes sur la page 1sur 12

Scripts Shell et commandes Linux

cd /home/dd/tmp

Les scripts Shell


Un script shell ou fichier de commandes est un fichier texte qui continet des commandes du shell, qui seront xcutes de manire non intractive. La toute premire ligne du fichier doit contenir le nom de linterprteur utiliser (cela est valable pour tous les langages de script). Cette ligne doit commencer par #! (SHEBANG!) suivi de lexcutable utiliser pour lancer le shell. Pour un script bash , on aura donc en dbut de fichier en gnral : #! /bin/bash # commentaire de debut du script commandes bash

rm -R * echo nettoyage fini ! <esc>:wq

note : si le rpertoire courant de lutilisateur est dans le PATH il est inutile de spcifier le ./ .
#!/bin/bash # script bonjour.sh echo Bonjour $USER echo Aujourdhui nous sommes le ; date echo et il va falloir se mettre au Shell !!

Pour excuter un script on lappelle simplement par son nom, mais il y a 2 conditions satisfaire :

Entres-sorties

Pour afficher on utilise la commande echo de la facon suivante : echo un texte quelconque entre guillemets

le script doit tre excutable par celui qui le lance le script doit tre dans le chemin dexcution ou son chemin spcifi compltement

note : le texte sera suivi automatiquement par un saut de ligne.


On peut utiliser des caractres spciaux habituels, qui seront interprts

Voici un exemple de cration et dexcution de script simple : $> vi nettoie_tmp.sh #! /bin/bash

seulement avec loption -e. Rappel des caractres spciaux :

\n (saut ligne),

1/12

Scripts Shell et commandes Linux



\b retour arrire), \t (tabulation), \a (alarme), \c (fin sans saut de ligne) exercice : crire un script qui utilise echo et qui crit ls, fait une pause exemple en attendant une saisie utilisateur et execute un ls (toujours dans un echo) echo Bonjour \nMesdames ! echo -e Bonjour \nMesdames ! echo -e Bonjour \nMesdames, \Mesdemoiselles et Messieurs \c Rappel : les variables du shell sont dfinis par leur nom, initialis par un Pour lire une valeur au clavier et la ranger dans une variable, on utilise read. Et ce de la faon suivante : X=12 read var1 var2 Voici un exemple echo Saisissez votre civilit read civil echo Saisissez a la suite vos prnom et votre nom read prenom nom echo Bonjour $civil $prenom $nom x=a y=b xy=cd c= Salut les gars echo $X echo $c note : lorsque le nom de la variable peut tre ambigu, on utilise les accolades pour lever lambiguit : = (sans espace) et rfrences par un caratre $ qui permet dvaluer leur valeur. Il en va de mme pour les scripts. echo ls ou echo ls donnent le mme rsultatils affichent le mot ls. On utilisera le caractre magique anticote ou cote inverse (en gnral sous la touche 7 dun clavier Francais) pour encadrer la commande :

Variables et paramtres dun script

Comment afficher le rsultat dune commande ?

echo $xy

2/12

Scripts Shell et commandes Linux


cd echo ${x}y ay echo ${xy} cd Il existe un certain nombre de variables prdfinies plus spcialement utiles aux scripts. Voici les principales : $0 : le nom du script $1 $9 : les paramtres ventuels passs au script $# : le nombre de paramtres passs au script $* : la liste des arguments partir de $1 $? : la sortie de la dernire (0 = succs) $$ : le n PID du processus courant $! : le n PID du processus fils Voici qq exemples : $> vi compte.sh # compte les fichiers dun certain type dans le rpertoire cible # compte.sh utilise 2 parametres # $1 : le rpertoire cible # $2 : le type dextension de fichiers recherchs # on se place dans le rpertoire cd $1 Pour structurer et rutiliser son code comme dans tout langage, on peut utiliser des fonctions. On dclare la fonction avec le mot rserv function et on lexcute en Note : au del de 10 paramtres on peut utiliser la commande shift . Aprs un shift $1 prend la valeur de $2, , $9 prend la valeur de $10 exercice : faire la somme des neuvime et dixime paramtre dun script. (truc : utiliser expr pour faire effectivement le calcul) # et on compte les fichiers ! ls *.$2 |wc <esc>:wx $> ./compte.sh /var/log log 13 13 150 $> cd / $> echo $? 0 $> touch essai Cant touch essai : permission denied $> echo $? 1

Les fonctions

3/12

Scripts Shell et commandes Linux


rfrenant son nom. Les paramtres ventuels sont passs sans parenthses. # def fonction function nom_fonction { instructions } # appel fonction sans parametre nom_fonction # appel fontion avec paramtres nom_fonction paramtre Les fonctions retournent un statut dexcution (OK ou HS) respectivement 0 ou !=0. Il est accessible par $? Les fonctions peuvent retourner une valeur numrique (<255) grace au mot rserv return Des exemples : # test fonctions # function titre { # il ny a a pas de parametre echo un titre quelconque } if instructions then Permet dorienter le contrle du programme suivant la valeur logique dune expression. Cest une alternative. Au lieu de continuer sexcuter squentiellement, si lexpression est vraie on va excuter telle partie du programme, sinon telle autre. Un if a la forme suivante : 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 (sil y en a) echo $1

La Structure if

4/12

Scripts Shell et commandes Linux


#1er bloc dinstructions else #2nd bloc dinstructions fi Le nombre dalternatives nest pas limit then elif else doivent figurer sur une nouvelle ligne (ou tre prcds de ;)

Les conditions Logiques

Testes soit par la commande test soit par placement de lexpression entre [] : test expression [ expression ] # attention aux espaces !!!!! Nous allons passer en revue les diffrents oprateurs utilisables dans les conditions logiques. Il en existe pour chaque type doprande (chaines de

Alternatives imbriques : if condition1 then instruction1 instruction2 . elif condition2 then instruction3 instruction4 .. elif condition3 then instruction5 instruction6 .. fi

caractres, entiers, fichiers)

tests de chaines

s1 = s2 ( galit ? ) s1 != s2 ( s1 diffrente de s2 ? ) s1 (chaine s1 non vide ? ) -z s1 (chaine s1 vide ? )

test dEntiers

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

5/12

Scripts Shell et commandes Linux


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 suprieur ou gal on teste donc si n1 >= n2) n1 -le n2 ( le veut dire less or equal ou infrieur ou gal on teste donc si n1 <= n2) # Avant dexcuter un script, on peut sassurer quil existe if [ -f ~/.bashrc ] then # si la note est > 15 if [ $note -gt 15 ] then echo Trs bien ! fi

test de Fichiers

. /.bashrc fi

-r fich (r = readable , fichier fich lisible ? ) -w fich (w = writable , fichier fich modifiable ? ) -x fich (x = eXecutable , fichier fich excutable ? ) -f fich (f = file : fich fichier ordinaire ? ) -d fich (d = directory , fich est un rpertoire ? ) -s fich (fich fichier non vide ? ) Permet de comparer une expression plusieurs autres expressions constantes ou comportant des caractres spciaux pour le shell (?, *, []) : case $variable in valeur1) #1er bloc dinstructions expr1 -o expr2 (expr1 ou expr2) expr1 -a expr2 (expr1 et expr2) expression (ngation de expr1) Quelques exemples ;; valeur2) #2me bloc dinstructions ;; valeur3) #3me bloc dinstructions ;;

La Structure case

Combinaisons logiques dexpression

6/12

Scripts Shell et commandes Linux


*) #Traitement des autres valeurs ;; esac Une pseudo clause default est possible en donnant la dernire forme la valeur * for util in /home/* > done 1 2 3 4 $>

La Boucle for

do echo bonjour utilisateur $util done

Itrer lexcution dun groupe de commandes avec un paramtre prenant ses valeurs successives dans une liste for variable in liste_de_valeurs do # Traitement rpter done do et done doivent tre sur une nouvelle ligne (ou prcds dun ;) $> une simple boucle $> # on ne fait pas un script $> # on enchaine les commandes $> for i in 1 2 3 4 > do > echo $i

La Boucle while

Permet de boucler tant quune expression renvoie la valeur Vrai : while instructions do # instructions rpter done 1 do et done doivent tre sur une nouvelle ligne (ou prcds de ;) while who | grep -s stage3 do

7/12

Scripts Shell et commandes Linux


echo $G sleep 300 done &

5 : Les fichiers spciaux 7 : Les possibilits diverses 8 ou 1m : Les commandes d'administrations systme 9 : glossaire

Interruptions

On peut spcifier la section dans laquelle on veut effectuer la recherche (grace au paramtre n).

Il est possible dinterrompre plus ou moins violemment (en continuant ou pas le programme ou le shell) break : interrompt lexcution et reprend linstruction qui suit la boucle return : interrompt lexcution et sort du script en cours

who

Identifier les utilisateurs du systme

fournit de informations sur l'ensemble des utilistaeurs qui sont actuellement connects 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.

exit : interrompt lexcution et retourne au niveau du SHELL appelant

Les commandes Linux


Consulter le manuel

man [n] commande


Visualisation l'cran des informations concernant la commande spcifie. L'affichage est realis par un more. Le manuel est divis en huit sections:

Changer de mot de passe

Pour se connecter, il faut :

1 : Les commandes utilisateurs 2 : Les appels sytmes 3 : La librairie des sous-routines 4 : Les formats de fichiers

un login (identificateur de l'utilisateur) assign par votre administrateur systme un password (mot de passe) propre chaque utilisateur

8/12

Scripts Shell et commandes Linux


passwd Permet de dfinir 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. -d : Evite de lister le contenu d'un rpertoire : si rep est un repertoire, ls -l rep listera le contenu du rpertoire rep, alors que ls -ld rep listera la description du rpertoire

changer de rpertoire

Afficher une chaine de caractres

cd chemin change le rpertoire courant pour celui specifi par le chemin. cd change le rpertoire courant pour le home directory. cd change le rpertoire courant pour le rpertoire prcdent pwd (print working directory) affiche le chemin du rpertoire courant

echo chaine affiche la chaine passe en paramtre .(vous pouvez aussi afficher des variables: echo $PATH, pour visualiser la variable PATH) banner chaine affiche la chaine passe en paramtre avec des grosses lettres

Commandes et manipulation des rpertoires

Visualiser le contenu d'une rpertoire

Crer et dtruire un rpertoire

ls [-FaRl] liste le contenu d'un rpertoire quelques options : -F Positionne la fin des noms un / pour les rpertoires et un * : : -R : pour les fichiers excutables commencent par . ) Affichage rcursif Description complte du contenu d'un rpertoire (une ligne par fichier). Le premier caractre de la ligne indique le type du -l : fichier : - : standard d : rpertoire -a Affiche tous les fichiers, y compris les fichiers cachs (ceux qui

mkdir rpertoire cration d'un rpertoire contenant les deux fichiers . et .. rmdir rpertoire supprime un rpertoire vide (pour supprimer un rpertoire non vide, il faut utiliser la commande rm

Commandes et manipulation des fichiers

Visualier le contenu d'un fichier

cat fich1 fich2 concatne et affiche (sur la sortie standard) le contenu des fichiers paste fich1 fich 2

9/12

Scripts Shell et commandes Linux


concatne horizontalement les fichiers fich1 et fich2 et affiche (sur la sortie standard) le rsultat. 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 supplmentaire ESPACE : pour visualiser la page suivante h: pour obtenir de l'aide -i : -v : pour ne pas tenir compte des majuscules/minuscules pour afficher les lignes ne contenant pas l'expression spcifie.

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 rpertoire, alors la source peut tre une liste de fichiers.

Imprimer un fichier

lp [-dimp] fichiers imprime le ou les fichiers spcifis sur l'imprimante par dfaut ou sur celle spcifie 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 dfaut et de sa queue d'impression . (l'option -t permet de visualiser toutes les imprimantes) cancel num_impression detruit l'impression designe par num_impression(vous recuperz ce numero par la commande lpq ou lpstat)

Dplacer ou changer le nom d'un fichier

mv source destination renomme ou deplace le fichier source en destination. Si la destination est un rpertoire, alors la source peut tre une liste de fichiers.


Chercher une chaine de caractres dans un fichier

Identifier le type d'un fichier

file fichiers grep [-iv] expression fichiers sans option : recherche dans les fichiers les lignes contenant l'expression Dtermine le type du ou des fichiers spcifis. (Attention, le rsultat est parfois errone)

10/12

Scripts Shell et commandes Linux

Crer un lien sur un fichier -f : ln [-s] source destination cration un lien sur un fichier ou un rpertoire. Un lien est un moyen d'accder un mme fichier ou un rpertoire sous plusieurs noms ou partir de plusieurs rpertoires. Attention un lien n'est pas une copie: si vous modifiez le fichier alors tous les liens sur ce fichier seront modifis. 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 rpertoires. : force la suppression du fichier

-r resursivit. permet d'effacer un rpertoire et son contenu

Rechercher un fichier

find rep -name nom -print recherche le(s) fichier(s) caractris par name (vous pouvez utiliser une expression rgulire), partir du rpertoire rep et affiche le rsultat. vous pouvez dcrire le fichier rechercher par une expression rguliere, ou indiquer le type de fichiers chercher ou encore le propritaire fichiers... (pour plus de dtails, voir le man) ... vous pouvez aussi executer d'autres actions, comme effacer le

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. Pour chaque fichier, il y a trois classes d'utilisateurs utilisateur : le propritaire du fichier groupe : autre : r : lecture w : criture le groupe auquel appartient le fichier tous les autres

Permission sur les fichiers

Dtruire un fichier

rm [-irf] fichiers efface les fichiers(attention, on ne peut pas rcuperer un fichier qui a t effac) -i : intractif, demande une confirmation sur chaque fichier

Les permissions accordes ces trois classes sont :

11/12

Scripts Shell et commandes Linux


x excution (pour un fichier, peut tre execut, pour un : rpertoire, peut devenir rpertoire courant) 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. chmod mode fichiers change les permissions du ou des fichiers/rpertoires.

Se connecter sur une autre station

exemple mode dsir : rwxr-xr-user group other


rwx 7 chown proprietaire fichiers change le propritaire du fichier. Le nouveau propritaire doit tre connu du systme. chgrp groupe fichiers change le groupe du fichier. Le nouveau groupe doit tre connu du systme. r-x 5 r-100 en binaire 4 ps 111 101

Surveiller les programmes en cours d'execution

d'ou la commande chmod 754 fichier

affiche la liste des processus actifs. Attention les options de cette commande change suivant le systme que vous avez, (verifiez les par le man)

Tuer un processus

Divers

Se connecter sur un autre compte

kill num_process supprime le processus specifi (vous recuperez le numro du processus par un ps). Si malgr la commande, le processus n'est pas dtruit, essayez kill -9 num_process

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 excuts et vous vous retrouvez dans le home directory du nouveau compte.

Redirection des entres-sorties


< > >> l'entre standard est lu partir d'un fichier La sortie standard est redirige dans un fichier (RAZ du fichier) La sortie standard est redirige dans un fichier (concatnation du fichier)

La redirection des erreurs dpend du shell dans lequel vous tes, soit sh , soit ksh ou encore csh

12/12