Bonjour, dans le cadre d'un cours de systeme en DUT info premiere année on a un probleme a résoudre, voici en gros l'énoncé :
Ecrire une commande menage [-d <répertoire> ] [-a] qui détruit tous les fichiers de nom core a.out, finis par .bak ou de taille nulle. Les options de la commande , de 0 a 2 peuvent apparaitre dans n'importe quel ordre :
- -d <rép>: la recherche se fait à ârtor de ce rep ou du HOME par défaut
- -a : entraine l'affichage par un listing long avant supression
La commande doit tester le nombre et le type de ses arguments. Comme on ne sait ni leur nombre ni leur ordre, on fera une boucle sur les arguments, contenant un switch vers les différentes valeurs que l'on peut trouver et une erreur si on ne reconnait pas la valeur. Attention ! -d sera compté comme un argument et <répértoire> comme un autre argument (car ce sont les espaces qui délimitent les arguments d'une commande).
On a fait l'exo mais il nous sort une vieille erreur du style tiret manquant, mais on voit pas ou, apparement l'erreur vient du switch, quelqu'un aurait une idée car ça fait un long moment qu'on cherche et on trouve pas.
#! /bin/csh
@ d = 0
@ a = 0
if( $#argv < 3 ) then
echo "erreur"
else
foreach i ($argv)
@ j = 1
echo $i
switch ( $i )
case "-d" :
if ( -d $argv[$j+1] ) then
@ d = 1
else echo ' Erreur le rep indique n est pas au bon endroit ou n'est pas present '
endif
@ j ++
breaksw
case '-a' :
if ( ! ( -d $argv[$j+1] ) ) then
@ a = 1
endif
@ j ++
breaksw
default :
@ j ++
endsw
end
if ( $d==0 || $a==0 ) then
echo 'erreur bla bla d ou a a 0'
else
find ~ \( -name "*.bak" -o -name "a.out" -o -name "core.*" -o -size 0 \) -exec ls -l {} -exec rm {} \;
endif
endif