3.3 Aiguillages
3.3.1 Instruction case
Script de base
#! /usr/bin/ksh
case $# in
1|2) echo « On a recu 1 ou 2 arguments »
echo « On enchaine apres l’aiguillage »
;;
3) echo « On a recu 3 arguments »
echo « On enchaine apres l’aiguillage »
;;
*) echo « Mauvais appel, il faut 1 ou 2 ou 3 arguments »
exit 1
;;
esac
echo « Suite du traitement »
# ?(expr1|expr2|…) Au plus une apparition d’une des expressions
# *(expr1|expr2|…) Un nombre quelconque d’apparitions (éventuellement aucune)
# +(expr1|expr2|…) Un nombre quelconque d’apparitions (au moins une)
# @(expr1|expr2|…) Exactement une des expressions
# !(expr1|expr2|…) Aucune des expressions
Variante du script de base
#! /usr/bin/ksh
Argument=$1
[ B$Argument = B ] && Argument=null
case $Argument in
echo) echo « On a recu 1 ou 2 arguments »
echo « On enchaine apres l’aiguillage »
;;
arg) echo « On a recu 3 arguments »
echo « On enchaine apres l’aiguillage »
;;
*) echo « Mauvais appel, il faut 1 ou 2 ou 3 arguments »
exit 1
;;
esac
echo « Suite du traitement »
# ?(expr1|expr2|…) Au plus une apparition d’une des expressions
# *(expr1|expr2|…) Un nombre quelconque d’apparitions (éventuellement aucune)
# +(expr1|expr2|…) Un nombre quelconque d’apparitions (au moins une)
# @(expr1|expr2|…) Exactement une des expressions
# !(expr1|expr2|…) Aucune des expressions
3.3.2 Instruction select du Korn-Shell
Script de base
#! /usr/bin/ksh
PS3= »Tapez votre choix : »
select i in « Liste » « Ajout » « Modification » « Sortie »
do
case $REPLY in
1|2|3) echo $i
;;
4) echo $i
exit 0
;;
*) echo « Choix impossible »
;;
esac
done
select f in *
do
read cmd? »Entrez votre commande: »
$cmd $f
done
Variante du script de base
#! /usr/bin/ksh
PS3= »Tapez votre choix : »
select i in « status » « stop » « start » « sortie »
do
case $REPLY in
1) service smbd $i
;;
2) service smbd $i
;;
3) service smbd $i
;;
4) echo $i
exit 0
;;
*) echo « Choix impossible »
;;
esac
done
select f in *
udo
read cmd? »Entrez votre commande: »
$cmd $f
done
3.4.2 Redirections particulières de l’entrée standard: Script en ligne
Script de base 1
#! /usr/bin/ksh
# Affiche du texte et réalise les expansions de variable et commandes si besoin
cat << fin
Ceci est l’entrée standard de la commande
Type du terminal = $TERM
Il est $(date +%H:%M )
fin
Variante du script de base 1
#! /usr/bin/ksh
# Affiche du texte et réalise les expansions de variable et commandes si besoin
cat << fin
Ceci est l’entrée standard de la commande
Type du terminal = $TERM
Il est $(date +%H:%M )
Il est $(date +%c )
Il est $(date +[%d-%m-%Y:%H:%M] )
fin
Script de base 2
#! /usr/bin/ksh
# Affiche du texte et NE REALISE PAS les expansions de variables, NI les commandes
cat << \fin
Ceci est l’entrée standard de la commande
Type du terminal = $TERM
Il est $(date +%H:%M )
fin
3.4.3 Gestion des Entrées/Sorties: Compléments
Script de base
#! /usr/bin/sh
:
:
#Ouverture du 1er fichier en lecture
exec 3< fic1
#Ouverture du 2eme fichier en ecriture
exec 4> fic2
#Lecture ligne par ligne du 1er fichier
while read <&3 ligne
do
#Ecriture sur la sortie standard
echo $ligne
echo « Copier(o/n – lecture vide pour sortir)? \c »
#Lecture depuis l’entrée standard
read rep
if test -z « $rep » ; then
break
fi
if test « $rep » = o
then
#Ecriture dans le 2eme fichier
echo $ligne >&4 $ligne
fi
done
:
:
Script de base – Exemple de syntaxe dans le cas particulier des commandes internes read/print du Korn-Shell
#! /usr/bin/ksh
:
:
#Ouverture du 1er fichier en lecture
exec 3< fic1
#Ouverture du 2eme fichier en ecriture
exec 4> fic2
#Lecture ligne par ligne du 1er fichier
while read -u3 ligne
do
#Ecriture sur la sortie standard
print $ligne
print « Copier(o/n – lecture vide pour sortir)? \c »
#Lecture depuis l’entrée standard
read rep
if test -z « $rep » ; then
break
fi
if test « $rep » = o
then
#Ecriture dans le 2eme fichier
print $ligne -u4 $ligne
fi
done
:
:
5. Outils avancés du Shell: sed et awk
Exercice
À partir d’un fichier texte, mettre en forme les prénoms en minuscules avec la première lettre en majuscule, et mettre les noms en majuscules.
roger MARTIN 12000 cd1
rene duval 500 cd1
marie pervenche 12010 cd3
Marcel dupond 600 cd2
paul MARTIN 10000 cd4
roger MARTIN 12500 cd1
Rene DUVAL 510 cd1
marie pervenche 13000 cd3
marie MARTIN 13000 cd3
Sophie Martinez 6512 cd2
Sylvie Martinelli 45678 cd2
Paul Legrand 4560 cd5
michel DUVAL 54500 cd1
Mireille Duvalier 12345 cd2
Paul LEGRAND 14560 cd5
Rene Pervenche 5400 cd3
Paul Martinez 5600 cd2
Andre dupond 650 cd5
Script pour mettre les noms en majuscules et les prénoms en minuscules avec la première lettre en majuscules:
#! /usr/bin/ksh
[ -f exemple.txt.MODIF6 ] && cp /dev/null exemple.txt.MODIF6
cat exemple.txt | while read line
do
PRENOM=$(echo $line | cut -d » » -f1)
NOM=$(echo $line | cut -d » » -f2)
NOMBRE=$(echo $line | cut -d » » -f3)
CD=$(echo $line | cut -d » » -f4)
NOM=$(echo $NOM | tr « [a-z] » « [A-Z] »)
PRENOM=$(echo $PRENOM | tr « [A-Z] » « [a-z] »)
PRENOM=$(echo -e « $PRENOM » | sed ‘s/^./\u&/’)
echo « $PRENOM $NOM $NOMBRE $CD » >> exemple.txt.MODIF6 && sleep 2
done
- Permet de vérifier si le fichier de destination existe, et de le purger le cas échéant pour enregistrer les données en sortie:
[ -f exemple.txt.MODIF6 ] && cp /dev/null exemple.txt.MODIF6
- Permet de mettre les noms en majuscules:
NOM=$(echo $NOM | tr « [a-z] » « [A-Z] »)
- Permet de mettre les prénoms en minuscules:
PRENOM=$(echo $PRENOM | tr « [A-Z] » « [a-z] »)
- Permet de mettre la première lettre du prénom en majuscule:
PRENOM=$(echo -e « $PRENOM » | sed ‘s/^./\u&/’)


