Problème programmation SHELL (SH) sous Linux

Fermé
neo - 11 déc. 2003 à 14:30
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 12 déc. 2003 à 17:01
Bonjour ,

Je suis en train de developper un script en Shell (SH) pour Linux.
J'ai un gros problème sur lequel j'ai planché pendant plusieurs heures, voire
plusieur journées, en vain.

Je vous serai très reconnaissant si vous pouviez me depanner à
trouver l'algorithme correct en Bash (SH)

Tous les paramètres du programme sont rentrés en ligne de commande.
Leur nombre n'est pas connu à l'avance bien sûr !

Je ne trouve d'algorithme comparable à celui qui est realise lorsque l'on
execute un "ls -l" ou un "find . -type f -name "*.c"

Dans mon cas, je souhaiterai traiter les arguments rentres en ligne de commande
en suivant ce shema :

// Appel du programme : "./monprog <argument1> <argument2> <...>"

// Shema :

- Option "-C <arg1>" -> appelle fonction "F1 <arg1>"
- Option "-i <arg2>" -> fonctionne uniquement avec option -C
appelle fonction "F1 <arg1> <arg2>
- Option "-s <arg3>" -> fonctionne uniquement avec option -C
appelle fonction "F1 <arg1> <...> <arg3>
- Option "-d <arg4>" -> fonctionne uniquement avec option -C
appelle fonction "F1 <arg1> <...> <arg4>


// Exemple : l'appel "./monprog -C toto -i fifi -s lala" doit
executer la fonction "F1 toto fifi lala"

- Option "-l <arg4> <arg...>" -> appelle une fonction "F2" avec comme
paramètre au moins un argument.

// Exemple : l'appel "./monprog -l math opengl stdlib -C toto -s lala" doit
executer la fonction ---> "F2 math opengl stdlib"
puis la fonction ---> "F1 toto _rien lala"

###############################################################
################ Voici ce que j'ai deja essayé de programmer,
################ mais bien sur, ca ne marche pas :-(
###############################################################

while test $# -ne 0
do
case $1 in
"-t") res=`echo "$2"|grep -E "^-"`;
if [ $? -ne 0 ]
then
verrifStructureProjet $2
else
echo "inco";break;
fi
shift;;

"-o")
test $t1 = 1 -a -z $t2
while [ $? -eq 0 ]
do
res=`echo "$2"|grep -E "^-"`;
echo "kkk "
done

t1=$?
if [ $t1 -ne 0 ]
then
test -z "$2"
t2=$?
if [ $t2 -eq 0 ]
then
echo "bye";break;
else
fixeLibrairies $2
fi
else
echo "bye";break;
fi
shift;;

"-C") res=`echo "$2"|grep -E "^-"`;
if [ $? -ne 0 ]
then
test -z "$2"
if [ $? -eq 0 ]
then
echo "bye";break;
else
nomFich="$2";
test $3 != "-i" -a $3 != "-s" -a $3 != "-d" -a $3 != "-O";
echo "----- $?"
case $3 in
"-i") test -z "$4"
if [ $? -ne 0 ]
then
testeArg $4 inc;
else
break;
fi;;
"-s") test -z "$4"
if [ $? -ne 0 ]
then
testeArg $4 src;
else
break;
fi;;
"-d") test -z "$4"
if [ $? -ne 0 ]
then
testeArg $4 dat;
else
break;
fi;;
"-O") test -z "$4"
if [ $? -ne 0 ]
then
testeArg $4 obj
else
break;
fi;;
esac
creeStructureProjet $nomFich $varInc $varSrc $varObj $varDat;
fi
else
echo "inco";break;
fi
shift
esac
shift
echo "++"
done
A voir également:

3 réponses

jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
11 déc. 2003 à 16:27
Hello,
Regarde
man bash --> getopt
ou un simple
help getopt
depuis un terminal.
Tout celà va te simplifier le travail (et c'est du bash)...

Johan
The software said "Requires Windows98, Win2000, or better,
So I installed Unix.
0
Tout d'abord, un grand merci pour ton aide.
Le problème, ce que comme c'est dans le cadre d'un projet scolaire, je n'ai pas le droit d'utiliser la commande GETOPT. Il faut que je fasse cela avec des boucles, les variables $1,$2...$@,grep, find.... mais tout sauf getopt :-)
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
12 déc. 2003 à 17:01
Evidemment, pour ce que j'en pense.
Encore un enseignant qui n'a sans doute jamais travaillé sur le terrain.
Le but de l'enseignement n'est , à mon avis pas de réinventer la roue mais de partir de l'existant (quitte à l'améliorer au besoin) et de tirer avantage du dit existant.
Que dirait-on dans une société de dévelloppement si on devait réécrire systématiquement les bibliothèques ayant fait leurs preuves (libc et Cie, modules Python , Perl...)
C'est déjà un bon exercice de lire la documentation et d'en tirer le meilleur parti.

Johan
The software said "Requires Windows98, Win2000, or better,
So I installed Unix.
0