SlideShare uma empresa Scribd logo
1 de 35
Programmation shell
Programmation shell
Ensemble de commandes dans un fichier acceptant des
paramètres:
- Non déclaratif
- Interprété
Les paramètres sont repérés par leur position quand on
appelle le script.
Plusieurs Shells:
- Les Bourne Shells (sh,ksh,,bash)
- Les C-Shells (csh,tcsh))
Ordre des opérations
1. Ouvrir un fichier texte et mettre en première ligne le shell
#/bin/sh
2. Ecrire le rogramme
3. Le rendre exécutable :
chmod a+x programme
Exemple
$cat prog1.sh
#!/bin/sh
date
$chmod a+x prog1.sh
$./prog1.sh
Variables utilisateurs
On peut créer des variables V par affectation (sans déclaration) et
les utiliser avec $V
Manipulation des expressions arithmétiques avec expr
#!/bin/sh
C="abc"
N=12
echo "variable C = " ${C}
echo "variable N = " ${N}
echo "variable N+1 = c" ; expr ${N} + 1
N=‘expr ${N} + 10‘
echo "variable N apres N=N+10= " ${N}
Variables prédéfinies
$* ou $@ : liste des paramètres
$#: nb de paramètres
(sans le nom de la commande)
$$ ou $0 : nom processus en cours
$?: code retour de la dernière commande exécutée
$1: 1er paramètre
$2 : 2ème paramètre
...........
$n : nème paramètre
Exemples
$cat prog.sh
#!/usr/bin/sh
echo "Nombre de parametres = " $#
echo “Nom programme = " $0
echo "Parametre numero 1 = " $1
echo "Nombre de fichiers dans le Répertoire $1 = " ;
ls $1 | wc -l
echo "code de retour de ls = $?"
apostrophes ‘.....’
Chaîne où tous les caractères spéciaux sont désactivés
$ echo '$PWD'
$PWD
$ echo $PWD
/home/staff/adam
$ ls 'f*.c'
f*.c : No such file or directory
$ ls f*.c
file.c f1.c
anti-apostrophes `..` ou $(…)
`cmd` ou $(cmd)
Chaîne résultat de la commande cmd
$ ls
f.c f1.c g.sql
$ X=`ls`; echo $X
f.c f1.c g.sql
guillemets “...”
Chaîne où tous les caractères spéciaux sont désactivés
sauf le dollar ($), l'anti-slash () et l'anti-apostrophe (`)
$ echo ""$PWD""
"/usr/bin“
$ ls "f*.c" f*.c
f*.c : No such file or directory
f.c f1.c
28
La commande test
Syntaxe test exp ou [exp];
réalise des tests et restitue le résultat sous la forme d’un
code retour
(=0 si OK, #0 sinon)
Quelques exemples de exp :
Opérateurs booléens :
! (négation)
&& ou -a (conjonction)
|| ou –o (disjonction)
Tests sur les fichiers (et sur les répertoires) :
• -e fichier Vrai si le fichier/répertoire existe
• -s fichier Vrai si le fichier à une taille supérieure à 0
• -z fichier Vrai si le fichier fait 0 octet (donc si il est vide)
• -r fichier Vrai si le fichier/répertoire est lisible
• -w fichier Vrai si le fichier/répertoire est modifiable
• -x fichier Vrai si le fichier est exécutable ou si le répertoire est
accessible
• -O fichier Vrai si le fichier/répertoire appartient à l’utilisateur
• -G fichier Vrai si le fichier/répertoire appartient au groupe de
l’utilisateur
• -b nom Vrai si fichier périphérique de type bloc
La commande test
Opérateurs de comparaison (suite)
Tests sur les fichiers (et sur les répertoires, suite) :
• -c nom Vrai si nom représente un périphérique (pseudo-
fichier) de type caractère (terminaux, modems et port
parallèles par exemple)
• -d nom Vrai si nom représente un répertoire
• -f nom Vrai si nom représente un fichier
• -L nom Vrai si nom représente un lien symbolique
• -p nom Vrai si nom représente un tube nommé
• f1 -nt f2 Vrai si les deux fichiers existent et si f1 est plus récen
que f2
• f1 -ot f2 Vrai si les deux fichiers existent et si f1 est plus ancien
que f2
• f1 -ef f2 Vrai si les deux fichiers représentent un seul et
même fichier
Opérateurs de comparaison
Tests sur les entiers :
• entier1 -eq entier2 Vrai si entier1 est égal à entier2
• entier1 -ge entier2 Vrai si entier1 est supérieur ou égal à en-
tier2
• entier1 -gt entier2 Vrai si entier1 est strictement supérieur à
entier2
• entier1 -le entier2 Vrai si entier1 est inférieur ou égal à en-
tier2
• entier1 -lt entier2 Vrai si entier1 est strictement inférieur à
entier2
• entier1 -ne entier2 Vrai si entier1 est différent de entier2
Entrée standard
Par la commande
read variable
Exemples :
#!/usr/bin/sh
read v
echo $v
Commandes exec
exec : commande s’exécute en remplaçant le processus
courant
exec $cmd
# Tout ce aui suit ne sera pas exécuté
#!/usr/bin/sh
# car le code de $cmd a remplacé celui ci
echo ligne 1
echo ligne 2
echo ligne 3
read cmd
Sélection
if <crit 1>; then
<liste de commandes 2>
elif <crit 2>; then
<liste de commandes 3>
fi
….
else
<liste de commandes 3>
fi
Exemples
$cat prog.sh
#!/bin/sh
if [ $# = 0 ]; then
echo "Il n’y a pas de parametres“
else
echo "il y a $# parametres"
fi
Aiguillages
case <chaine> in
<motif> ) <liste de commandes> ;;
............
............
<motif> ) <liste de commandes> ;;
esac
Exemple (cp)
$cat prog.sh
#!/usr/bin/sh
case $# in
0) pwd ;;
1) If [ -f $1 ] then
cat $1
else
echo "fichier $1 inexistant"
fi ;;
2) if [ -f $2 ] then
echo "fichier $2 existant"
else
cat $1 > $2
fi ;;
*) echo "2 parametres attendus au lieu de $* ";;
esac
Structures de contrôle
Exemple 2
echo "Voulez vous continuer le programme ?"
read reponse
case $reponse in
[yYoO]*) echo "Ok, on continue";;
[nN]*) echo "$0 arrete“
exit 0;;
*) echo "ERREUR de saisie"
exit 1;;
esac
Itération bornée
for variable in liste
do actions
done
for (( init; cond; steep ))
do shell_COMMANDS
done
#!/bin/bash
for file in /etc/*
do
if [ "${file}" == "/etc/resolv.conf" ]
then
countNameservers=$(grep -c nameserver /etc/resolv.conf)
echo "Total ${countNameservers} nameservers defined in ${file}"
break
fi
done
#!/bin/bash
prefix=$1
suffix=$2
new_prefix=$3
for i in $(ls ${prefix}*.${suffix});do
mv $i $(echo $i | sed s/${prefix}/${newn_prefix}/g)
done
rename_files.sh FILE txt TEXT (renomme FILE1.txt… FILE35.txt en TEXT1.txt ….TEXT35.txt)
Exemples
Cherche /etc/resolv.conf puis compte le nombre de ligne nameserver qu’il contient
Itération non bornée
while ( conditions ) ; do actions ; done
until ( conditions ) ; do actions ; done
#!/usr/bin/sh
i=1
while [ $i -le $# ] ; do
eval "echo parametre $i = $$i " ;
i=‘expr $i + 1‘ ;
done
Opérateur shift
Décalage logique à gauche des paramètres
On s’en sert souvent pour parcourir la liste des paramètres
Exemples
#!/usr/bin/sh
while [ $# -gt 0 ] ; do
echo $1
shift
done
Here Document
Exemples
cat <<HELP
prog – ce programme ………
USAGE: prog répertoire fichier1 fichier2 ...
Options: -v : mode bavard, -p : prend en compte ………., -s : valide la ………
EXEMPLE: prog –v –s /etc/ /etc/hosts
HELP
Moyen pratique pour envoyer plusieurs lignes de texte à une commande.
C'est utile pour écrire un texte d'aide dans un script sans avoir à mettre une
commande echo au début de chaque ligne. Un "here document"
commence par << suivi par une chaîne de caractères qui doit également
apparaître à la fin du here document
La récursion
Les procédures shell peuvent s’appeler elles-mêmes;
Exemple de find:
$cat prog.sh
#!/bin/sh
fic=$1
dir=$2
cd $dir
if( test -f $fic ) then
echo "Le fichier est dans le repertoire " ; pwd
exit 0
fi
for i in * ; do
if [-d $i ] then
$HOME/prog.sh $fic $i ;
fi ;
done
crond
Exécution périodique
crond
- Pour spécifier des utilisateurs ayant le droit d’utiliser crond ou ceux n’ayant
pas ce droit. On utilise les fichiers /etc/cron.allow and /etc/cron.deny.
- Autoriser user à utiliser crond: En tant que root on ajoute user dans le
fichier /etc/cron.allow s’il existe. S’il créer le.
• Si le fichier /etc/cron.allow existe, seul les utilisateurs mentionnés auront le
droit d’utiliser crond.
• Si le fichier /etc/cron.allow n’existe pas, c’est le fichier /etc/cron.deny qui est
pris en compte : les utilisateurs mentionnés n’auront pas le droit d’utiliser
crond.
• Si aucun des deux fichiers n’existe, seul le super utilisateur (root) aura le droit
d’utiliser la commande cron
• Remarque : un fichier /etc/cron.deny vide signifie que tout les
utilisateurs peuvent utiliser crond.
crond
• Afin d'éditer la table cron, il suffit d'exécuter la commande suivante :
crontab -e
Cette commande a pour effet de lancer vi présentant la table actuelle . Chaque
entrée de la table correspond à une tâche à exécuter :
mi he jo_mo mo jo_se command
jo_se : comprise entre 0 et 7, le dimanche étant 0 ou 7, le lundi 1, etc ...
crond
métacaractères :
* : toutes les valeurs de ce champ.
/ : permet de spécifier une répétition.
- : permet de définir une plage.
, : pour spécifier plusieurs valeurs.
* /5 * * *
Exécuter une commande toutes les cinq minutes.
0 22 * * 1-5
Exécuter une commande tous les jours de la semaine du lundi ou vendredi à 22h.
17 19 1,15 * *
Premier jour et quinzième jour du mois à 19h17
crontab -l // liste
Crontab -r // supp
Exercice 1
1 – Ecrire un script nommé decomp qui peut
décompresser automatiquement des fichiers bzip2, gzip
et zip
2- Ecrire un script shell nommé renome qui renomme de
nombreux fichiers et utilise un "here document" dans
son texte d'aide.
Exemple : renome ‘htm$' 'html' /home/user/rojet_web/*.htm
decomp
#!/bin/sh
ftype=`file $1`
case "$ftype" in
"$1: Zip archive"*)
unzip "$1" ;;
"$1: gzip compressed"*)
gunzip "$1" ;;
"$1: bzip2 compressed"*)
bunzip2 "$1" ;;
*) error "Le fichier $1 ne peut pas être décompressé avec decomp";;
esac
rename (1/2)
#!/bin/sh
# Si nous avons moins de 3 arguments, on affiche le message d'aide
if [ $# -lt 3 ] ; then
cat <<HELP
renomme plusieurs fichiers USAGE: ren 'regexp' 'replacement' files...
EXEMPLE: renomme tous les fichiers *.HTM en *.html: ren 'HTM$' 'html' *.HTM
HELP
exit 0
fi
OLD="$1"
NEW="$2"
shift
shift
# la variable $* contient maintenant tous les fichiers.
for file in $*; do
if [ -f "$file" ] ; then
newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"`
if [ -f "$newfile" ]; then
echo "ERREUR: $newfile existe deja"
else
echo "fichier $file renommé en $newfile ..."
mv "$file" "$newfile"
fi
fi
done
rename (2/2)

Mais conteúdo relacionado

Semelhante a programmation_shell_2022 (1).pptx

intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APP
frwebhelp
 
Cmd dos sous windows
Cmd dos sous windowsCmd dos sous windows
Cmd dos sous windows
Selman Dridi
 
Processus pére fils
Processus pére filsProcessus pére fils
Processus pére fils
Selman Dridi
 

Semelhante a programmation_shell_2022 (1).pptx (20)

A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redo
 
les Commandes linux/Unix (giants networks)
les Commandes linux/Unix (giants networks)les Commandes linux/Unix (giants networks)
les Commandes linux/Unix (giants networks)
 
Chapitre 3 Linux
Chapitre 3 LinuxChapitre 3 Linux
Chapitre 3 Linux
 
Ruby Pour RoR
Ruby Pour RoRRuby Pour RoR
Ruby Pour RoR
 
Boot
BootBoot
Boot
 
0079-cours-linux-base.ppt
0079-cours-linux-base.ppt0079-cours-linux-base.ppt
0079-cours-linux-base.ppt
 
0079-cours-linux-base.ppt
0079-cours-linux-base.ppt0079-cours-linux-base.ppt
0079-cours-linux-base.ppt
 
Commande linux
Commande linuxCommande linux
Commande linux
 
Commandes usuelle linux
Commandes usuelle   linuxCommandes usuelle   linux
Commandes usuelle linux
 
Cours php
Cours phpCours php
Cours php
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APP
 
[JK] BASH pour les utilisateurs de Windows
[JK] BASH pour les utilisateurs de Windows[JK] BASH pour les utilisateurs de Windows
[JK] BASH pour les utilisateurs de Windows
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
 
Cours_Linux_S1_Partie 2.pptx
Cours_Linux_S1_Partie 2.pptxCours_Linux_S1_Partie 2.pptx
Cours_Linux_S1_Partie 2.pptx
 
Cmd dos sous windows
Cmd dos sous windowsCmd dos sous windows
Cmd dos sous windows
 
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops) Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
 
Petit precis des_commandes_unix_utiles_a_ubuntu
Petit precis des_commandes_unix_utiles_a_ubuntuPetit precis des_commandes_unix_utiles_a_ubuntu
Petit precis des_commandes_unix_utiles_a_ubuntu
 
Tp n 5 linux
Tp n 5 linuxTp n 5 linux
Tp n 5 linux
 
PHP.pptx
PHP.pptxPHP.pptx
PHP.pptx
 
Processus pére fils
Processus pére filsProcessus pére fils
Processus pére fils
 

Mais de ManalAg (14)

AOP.pptx
AOP.pptxAOP.pptx
AOP.pptx
 
analex-slides.pdf
analex-slides.pdfanalex-slides.pdf
analex-slides.pdf
 
Cours05.pdf
Cours05.pdfCours05.pdf
Cours05.pdf
 
5_Modulation.pptx
5_Modulation.pptx5_Modulation.pptx
5_Modulation.pptx
 
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx
 
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).pptCours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
 
3_Multiplexage_TDM_FDM_CDM.pptx.pdf
3_Multiplexage_TDM_FDM_CDM.pptx.pdf3_Multiplexage_TDM_FDM_CDM.pptx.pdf
3_Multiplexage_TDM_FDM_CDM.pptx.pdf
 
Controller_Rest.pptx
Controller_Rest.pptxController_Rest.pptx
Controller_Rest.pptx
 
Journalisation_log4J.pptx
Journalisation_log4J.pptxJournalisation_log4J.pptx
Journalisation_log4J.pptx
 
testUnitaire (1).pptx
testUnitaire (1).pptxtestUnitaire (1).pptx
testUnitaire (1).pptx
 
MSIL (1).pptx
MSIL (1).pptxMSIL (1).pptx
MSIL (1).pptx
 
03-05_Execution_Suivi des couts.pdf
03-05_Execution_Suivi des couts.pdf03-05_Execution_Suivi des couts.pdf
03-05_Execution_Suivi des couts.pdf
 
3-ADO.NET.pdf
3-ADO.NET.pdf3-ADO.NET.pdf
3-ADO.NET.pdf
 
05_La Cloture du projet.pdf
05_La Cloture du projet.pdf05_La Cloture du projet.pdf
05_La Cloture du projet.pdf
 

programmation_shell_2022 (1).pptx

  • 2. Programmation shell Ensemble de commandes dans un fichier acceptant des paramètres: - Non déclaratif - Interprété Les paramètres sont repérés par leur position quand on appelle le script. Plusieurs Shells: - Les Bourne Shells (sh,ksh,,bash) - Les C-Shells (csh,tcsh))
  • 3. Ordre des opérations 1. Ouvrir un fichier texte et mettre en première ligne le shell #/bin/sh 2. Ecrire le rogramme 3. Le rendre exécutable : chmod a+x programme
  • 5. Variables utilisateurs On peut créer des variables V par affectation (sans déclaration) et les utiliser avec $V Manipulation des expressions arithmétiques avec expr #!/bin/sh C="abc" N=12 echo "variable C = " ${C} echo "variable N = " ${N} echo "variable N+1 = c" ; expr ${N} + 1 N=‘expr ${N} + 10‘ echo "variable N apres N=N+10= " ${N}
  • 6. Variables prédéfinies $* ou $@ : liste des paramètres $#: nb de paramètres (sans le nom de la commande) $$ ou $0 : nom processus en cours $?: code retour de la dernière commande exécutée $1: 1er paramètre $2 : 2ème paramètre ........... $n : nème paramètre
  • 7. Exemples $cat prog.sh #!/usr/bin/sh echo "Nombre de parametres = " $# echo “Nom programme = " $0 echo "Parametre numero 1 = " $1 echo "Nombre de fichiers dans le Répertoire $1 = " ; ls $1 | wc -l echo "code de retour de ls = $?"
  • 8. apostrophes ‘.....’ Chaîne où tous les caractères spéciaux sont désactivés $ echo '$PWD' $PWD $ echo $PWD /home/staff/adam $ ls 'f*.c' f*.c : No such file or directory $ ls f*.c file.c f1.c
  • 9. anti-apostrophes `..` ou $(…) `cmd` ou $(cmd) Chaîne résultat de la commande cmd $ ls f.c f1.c g.sql $ X=`ls`; echo $X f.c f1.c g.sql
  • 10. guillemets “...” Chaîne où tous les caractères spéciaux sont désactivés sauf le dollar ($), l'anti-slash () et l'anti-apostrophe (`) $ echo ""$PWD"" "/usr/bin“ $ ls "f*.c" f*.c f*.c : No such file or directory f.c f1.c 28
  • 11. La commande test Syntaxe test exp ou [exp]; réalise des tests et restitue le résultat sous la forme d’un code retour (=0 si OK, #0 sinon) Quelques exemples de exp : Opérateurs booléens : ! (négation) && ou -a (conjonction) || ou –o (disjonction)
  • 12. Tests sur les fichiers (et sur les répertoires) : • -e fichier Vrai si le fichier/répertoire existe • -s fichier Vrai si le fichier à une taille supérieure à 0 • -z fichier Vrai si le fichier fait 0 octet (donc si il est vide) • -r fichier Vrai si le fichier/répertoire est lisible • -w fichier Vrai si le fichier/répertoire est modifiable • -x fichier Vrai si le fichier est exécutable ou si le répertoire est accessible • -O fichier Vrai si le fichier/répertoire appartient à l’utilisateur • -G fichier Vrai si le fichier/répertoire appartient au groupe de l’utilisateur • -b nom Vrai si fichier périphérique de type bloc La commande test
  • 13. Opérateurs de comparaison (suite) Tests sur les fichiers (et sur les répertoires, suite) : • -c nom Vrai si nom représente un périphérique (pseudo- fichier) de type caractère (terminaux, modems et port parallèles par exemple) • -d nom Vrai si nom représente un répertoire • -f nom Vrai si nom représente un fichier • -L nom Vrai si nom représente un lien symbolique • -p nom Vrai si nom représente un tube nommé • f1 -nt f2 Vrai si les deux fichiers existent et si f1 est plus récen que f2 • f1 -ot f2 Vrai si les deux fichiers existent et si f1 est plus ancien que f2 • f1 -ef f2 Vrai si les deux fichiers représentent un seul et même fichier
  • 14. Opérateurs de comparaison Tests sur les entiers : • entier1 -eq entier2 Vrai si entier1 est égal à entier2 • entier1 -ge entier2 Vrai si entier1 est supérieur ou égal à en- tier2 • entier1 -gt entier2 Vrai si entier1 est strictement supérieur à entier2 • entier1 -le entier2 Vrai si entier1 est inférieur ou égal à en- tier2 • entier1 -lt entier2 Vrai si entier1 est strictement inférieur à entier2 • entier1 -ne entier2 Vrai si entier1 est différent de entier2
  • 15. Entrée standard Par la commande read variable Exemples : #!/usr/bin/sh read v echo $v
  • 16. Commandes exec exec : commande s’exécute en remplaçant le processus courant exec $cmd # Tout ce aui suit ne sera pas exécuté #!/usr/bin/sh # car le code de $cmd a remplacé celui ci echo ligne 1 echo ligne 2 echo ligne 3 read cmd
  • 17. Sélection if <crit 1>; then <liste de commandes 2> elif <crit 2>; then <liste de commandes 3> fi …. else <liste de commandes 3> fi
  • 18. Exemples $cat prog.sh #!/bin/sh if [ $# = 0 ]; then echo "Il n’y a pas de parametres“ else echo "il y a $# parametres" fi
  • 19. Aiguillages case <chaine> in <motif> ) <liste de commandes> ;; ............ ............ <motif> ) <liste de commandes> ;; esac
  • 20. Exemple (cp) $cat prog.sh #!/usr/bin/sh case $# in 0) pwd ;; 1) If [ -f $1 ] then cat $1 else echo "fichier $1 inexistant" fi ;; 2) if [ -f $2 ] then echo "fichier $2 existant" else cat $1 > $2 fi ;; *) echo "2 parametres attendus au lieu de $* ";; esac
  • 21. Structures de contrôle Exemple 2 echo "Voulez vous continuer le programme ?" read reponse case $reponse in [yYoO]*) echo "Ok, on continue";; [nN]*) echo "$0 arrete“ exit 0;; *) echo "ERREUR de saisie" exit 1;; esac
  • 22. Itération bornée for variable in liste do actions done for (( init; cond; steep )) do shell_COMMANDS done
  • 23. #!/bin/bash for file in /etc/* do if [ "${file}" == "/etc/resolv.conf" ] then countNameservers=$(grep -c nameserver /etc/resolv.conf) echo "Total ${countNameservers} nameservers defined in ${file}" break fi done #!/bin/bash prefix=$1 suffix=$2 new_prefix=$3 for i in $(ls ${prefix}*.${suffix});do mv $i $(echo $i | sed s/${prefix}/${newn_prefix}/g) done rename_files.sh FILE txt TEXT (renomme FILE1.txt… FILE35.txt en TEXT1.txt ….TEXT35.txt) Exemples Cherche /etc/resolv.conf puis compte le nombre de ligne nameserver qu’il contient
  • 24. Itération non bornée while ( conditions ) ; do actions ; done until ( conditions ) ; do actions ; done #!/usr/bin/sh i=1 while [ $i -le $# ] ; do eval "echo parametre $i = $$i " ; i=‘expr $i + 1‘ ; done
  • 25. Opérateur shift Décalage logique à gauche des paramètres On s’en sert souvent pour parcourir la liste des paramètres Exemples #!/usr/bin/sh while [ $# -gt 0 ] ; do echo $1 shift done
  • 26. Here Document Exemples cat <<HELP prog – ce programme ……… USAGE: prog répertoire fichier1 fichier2 ... Options: -v : mode bavard, -p : prend en compte ………., -s : valide la ……… EXEMPLE: prog –v –s /etc/ /etc/hosts HELP Moyen pratique pour envoyer plusieurs lignes de texte à une commande. C'est utile pour écrire un texte d'aide dans un script sans avoir à mettre une commande echo au début de chaque ligne. Un "here document" commence par << suivi par une chaîne de caractères qui doit également apparaître à la fin du here document
  • 27. La récursion Les procédures shell peuvent s’appeler elles-mêmes; Exemple de find: $cat prog.sh #!/bin/sh fic=$1 dir=$2 cd $dir if( test -f $fic ) then echo "Le fichier est dans le repertoire " ; pwd exit 0 fi for i in * ; do if [-d $i ] then $HOME/prog.sh $fic $i ; fi ; done
  • 29. crond - Pour spécifier des utilisateurs ayant le droit d’utiliser crond ou ceux n’ayant pas ce droit. On utilise les fichiers /etc/cron.allow and /etc/cron.deny. - Autoriser user à utiliser crond: En tant que root on ajoute user dans le fichier /etc/cron.allow s’il existe. S’il créer le. • Si le fichier /etc/cron.allow existe, seul les utilisateurs mentionnés auront le droit d’utiliser crond. • Si le fichier /etc/cron.allow n’existe pas, c’est le fichier /etc/cron.deny qui est pris en compte : les utilisateurs mentionnés n’auront pas le droit d’utiliser crond. • Si aucun des deux fichiers n’existe, seul le super utilisateur (root) aura le droit d’utiliser la commande cron • Remarque : un fichier /etc/cron.deny vide signifie que tout les utilisateurs peuvent utiliser crond.
  • 30. crond • Afin d'éditer la table cron, il suffit d'exécuter la commande suivante : crontab -e Cette commande a pour effet de lancer vi présentant la table actuelle . Chaque entrée de la table correspond à une tâche à exécuter : mi he jo_mo mo jo_se command jo_se : comprise entre 0 et 7, le dimanche étant 0 ou 7, le lundi 1, etc ...
  • 31. crond métacaractères : * : toutes les valeurs de ce champ. / : permet de spécifier une répétition. - : permet de définir une plage. , : pour spécifier plusieurs valeurs. * /5 * * * Exécuter une commande toutes les cinq minutes. 0 22 * * 1-5 Exécuter une commande tous les jours de la semaine du lundi ou vendredi à 22h. 17 19 1,15 * * Premier jour et quinzième jour du mois à 19h17 crontab -l // liste Crontab -r // supp
  • 32. Exercice 1 1 – Ecrire un script nommé decomp qui peut décompresser automatiquement des fichiers bzip2, gzip et zip 2- Ecrire un script shell nommé renome qui renomme de nombreux fichiers et utilise un "here document" dans son texte d'aide. Exemple : renome ‘htm$' 'html' /home/user/rojet_web/*.htm
  • 33. decomp #!/bin/sh ftype=`file $1` case "$ftype" in "$1: Zip archive"*) unzip "$1" ;; "$1: gzip compressed"*) gunzip "$1" ;; "$1: bzip2 compressed"*) bunzip2 "$1" ;; *) error "Le fichier $1 ne peut pas être décompressé avec decomp";; esac
  • 34. rename (1/2) #!/bin/sh # Si nous avons moins de 3 arguments, on affiche le message d'aide if [ $# -lt 3 ] ; then cat <<HELP renomme plusieurs fichiers USAGE: ren 'regexp' 'replacement' files... EXEMPLE: renomme tous les fichiers *.HTM en *.html: ren 'HTM$' 'html' *.HTM HELP exit 0 fi OLD="$1" NEW="$2"
  • 35. shift shift # la variable $* contient maintenant tous les fichiers. for file in $*; do if [ -f "$file" ] ; then newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"` if [ -f "$newfile" ]; then echo "ERREUR: $newfile existe deja" else echo "fichier $file renommé en $newfile ..." mv "$file" "$newfile" fi fi done rename (2/2)