ENSI-II2

Unix Environment, Scripting, Programming · lab

Voir tous les documents en systèmes d'exploitation et cloud

ENSI-II2

Environnement Unix

Correction du TP 2

Exercice 1

if [ $# -eq 1 ]

then

for i in users

do

if [ $i = $1 ]

then

echo "Utilisateur $1 connecté"

exit

fi

done

echo "Utilisateur $1 non connecté"

else

echo "nombre de paramètres incorrect."

fi

Exercice 3

if [ $# -eq 2 ] then

x=1

while [ $x -le $2 ]

do

nom="$1$x"

echo "Voulez vous créer le fichier $nom :"

read reponse

echo 'saisir o/n'

read reponse

if [ $reponse = o –o $reponse = O ]

then

touch $nom

fi

x=expr $x + 1

done

else echo "nombre de paramètres incorrect."

fi

Exercice 4

if [ $# -gt 0 ] then

echo "Trop de parametres."

else

echo "Le nombre d'utilisateurs connectés est :

"

users | sort u | wc -l

echo "Les utilisateurs connectés sont : "

users | sort -u

fi

Exercice 5

if [ $# -eq 1 ]

then

expr $1 + 1 > result 2> /dev/null

if [ -s result ]

then

echo "pas numérique"

else

echo "numérique"

fi

else

echo "nombres de paramètres incorrect"

fi

Publicité

Exercice 6

if [ $# -lt 1 ] then

echo " La liste des sous-répertoires du

répertoire courant est :"

for i in ls

do

if test -d $i then

echo "- $i \n"

fi

done

elif [ $# -eq 1 ] then

if test -d $1 then

echo " La liste des sous-répertoires du

répertoire $1 est :"

for i in ls $1

do

if test -d $i then

echo "- $i \n"

fi

done

else

echo "$1 n'est pas un répertoire."

fi

else

echo "nombre d'arguments > 1"

fi

Exercice 7

if [ $# -eq 1 ]

then

#Appel reccursif

./$0 $1 pwd

elif [ $# -eq 2 ]

then

if test -d $2

then

for i in ls $2

do

H. IDOUDI

1

ENSI-II2

Environnement Unix

if test $1 = $i

then

echo " $i est dans le repertoire $2"

fi

done

for i in ls $2

do

if test -d $i

then

./$0 $1 $i xx

fi

done

if [ $# -eq 2 ]

then

echo « élément non trouvé »

fi

else

echo "argument 2 doit être un répertoire."

Publicité

fi

else

echo " nombre d'arguments incorrect"

fi

Exercice 8

if [ $# -lt 1 ]

then

x=ls | wc –l

echo "Le nombre d'éléments du répertoire

courant est : $x"

else

for i in $@

do

if test -d $i

then

x=ls $i | wc –l

echo "Le nombre d'éléments de $i est : $x"

else

echo "$i n'est pas un répertoire"

fi

done

fi

Exercice 9

if [ $# -eq 2 ]

then

if test ! -f $1

then

echo " Le fichier est introuvable ."; exit

fi

if test ! -r $1 then echo " Vous n'avez pas le

droit de lecture sur le fichier $1."; exit

fi

if test -d $2

then

if test -w $2

then

cat $1 > "$2/$1"

else

echo " Vous n'avez le droit de lecture sur le

répertoire $2."; exit

fi

elif test -f $2

then

if test -w $2

then

echo " Le fichier existe déjà; voulez vous

l'ecraser (o-n) ?"

read reponse

until [ $reponse = o -o $reponse = n -o

$reponse = O -o $reponse = N ]

do

echo 'saisir o/n'

read reponse

done

case $reponse in

o) cat $1 > $2;exit;;

O) cat $1 > $2;exit;;

n) cat $1 >> $2;exit;;

N) cat $1 >> $2;exit;;

Publicité

esac

else

echo " Vous n'avez le droit de lecture sur le

fichier $2."; exit

fi

fi

else echo "nombre de paramètres incorrect."

fi

Exercice 10

x=0

mot=””

if [ $# -eq 1 ]

then

for i in cat $1

do

lg=echo $i | wc –c

if [ $lg -gt $x ] then

x=$lg

mot=$i

fi

done

echo "Le mot le plus long est : $mot "

else

echo " nombre de paramètres incorrect."

fi

H. IDOUDI

2

ENSI-II2

Environnement Unix

Exercice 11

if [ $# -eq 0 ]

then

echo -n "chaine 1 : "

read ch1;

echo -n "chaine 2 : "

read ch2

echo -n "chaine 3 : "

read ch3

elif [ $# -eq 3 ]

then

ch1=$1; ch2=$2; ch3=$3

else

echo "nombre de paramètres incorrect"

exit

fi

if ( test $ch1 = $ch2 -a $ch2 = $ch3 )

then

echo "les trois chaines sont egales."

elif ( test $ch1 = $ch2 )

then

echo "chaine 1 et chaine 2 sont égales."

elif ( test $ch1 = $ch3 )

then

echo "chaine 1 et chaine 3 sont égales."

elif ( test $ch2 = $ch3 )

then

echo "chaine 2 et chaine 3 sont égales."

else

echo "toutes les chaines sont différentes."

Publicité

fi

Exercice 12

if [ $# -eq 3 ] then

a=$3

m=$2

j=$1

Traiter les mois de longueur 31 jours

if [ $2 -eq 1 -o $2 -eq 3 -o $2 -eq 5 -o $2 -eq 7

-o $2 -eq 8 -o $2 -eq 10 ] then

if [ $1 -eq 31 ] then

j=1

m=expr $m + 1

else

j=expr $j + 1

fi

Traiter les mois de longueur 30 jours

elif [ $2 -eq 4 -o $2 -eq 6 -o $2 -eq 9 ]

then

if [ $1 -eq 30 ] then

j=1

m=expr $m + 1

else

j=expr $j + 1

fi

Traiter cas particulier du mois de décembre

elif [ $2 -eq 12 ] then

if [ $1 -eq 31 ] then

j=1

m=1

a=expr $a+ 1

else

j=expr $j + 1

fi

Traiter cas particulier du mois de février

elif [ $2 -eq 2 ] then

if [ $1 -eq 28 ] then

k=expr $3 % 4

if [ test $k -eq 0 ] then

j=expr $j + 1

else

j=1

m=expr $m + 1

fi

elif [ $1 -eq 29 ] then

j=1

m=expr $m + 1

else

j=expr $j + 1

fi

fi

#Affiche la date du lendemain avec le même

#format d’entrée

echo "La date du lendemain est : $j $m $a"

else

echo " le nombre de paramètres est incorrect."

fi

H. IDOUDI

3