boucle if - Shell/Batch - Programmation
Marsh Posté le 20-02-2006 à 21:26:24
Apparemment c'est de l'Unix, mais c'est pour quel shell ?
De toute manières, les if imbriqués sont poossibles.
Marsh Posté le 20-02-2006 à 21:27:03
tu peux sans probleme imbriquer plusieurs if en meme temps ca marche, ton erreur doit se situer dans la syntaxe , montre ton script?
Marsh Posté le 20-02-2006 à 21:32:55
/bin/sh
if [ $# -ne 1 ]; then
{ echo "Syntaxe : $0 nom de la classe (première lettre en MAJUSCULE) "
echo ""
} >&2
exit 1
fi
extension=0
while [[extension != cpp]||[extension != java]]
do
{
echo "Entrez le langage voulu (cpp ou java)."
read
extension=$EXTENSION
}done
nomClasse=$1
nomClasseMaj=$(echo $nomClasse | tr a-z A-Z)
nomClasseMin=$(echo $nomClasse | tr A-Z a-z)
nomClasseTesteur=${nomClasse}Testeur
repertoireFichierSource=./src/
if [extension == cpp]
nomFichierEntete=${nomClasse}.h
nomFichierImplementation=${nomClasse}.cpp
nomFichierTesteur=${nomClasse}Testeur.cpp
fichierEntete=${repertoireFichierSource}${nomFichierEntete}
fichierImplementation=${repertoireFichierSource}${nomFichierImplementation}
fichierTesteur=${repertoireFichierSource}${nomFichierTesteur}
fichierMakefile=${repertoireFichierSource}Makefile
#Saisie des informations de l'ent�e
echo "Entrez une description sommaire de la classe"
read
description=$REPLY
auteur=$LOGNAME
dateCreation=$(date +%d" "%b" "%Y" "%X)
reponse="O"
if [ -e $fichierEntete ] ; then
echo "Le fichier d'entete $fichierEntete existe. Voulez-vous l'écraser ? (O/N)"
read reponse;
fi
if [ $reponse = "O" ] || [ $reponse = "o" ]; then
echo "Génération de $fichierEntete"
touch $fichierEntete
echo "//------------------------------------------------------------------------------
/** @file $nomFichierEntete
* @brief $description
* @author $auteur
* @since $dateCreation
* @version 0.1
* @date $dateCreation
* @note Voir la description detaillée�explicité dans le fichier
* $nomFichierImplementation
*/
//------------------------------------------------------------------------------
#ifndef _${nomClasseMaj}_H
#define _${nomClasseMaj}_H
// En-tetes standards necessaires dans ce fichier en-tete seulement ------------
// En-tetes propres �l'application necessaires dans ce fichier en-tete --------
class $nomClasse
{
private :
public :
// CONSTRUCTEURs et DESTRUCTEURs
${nomClasse}() ;
~${nomClasse}() ;
protected :
} ;
//------------------------------------------------------------------------------
#endif //_${nomClasseMaj}_H
//------------------------------------------------------------------------------
" > $fichierEntete;
fi
if [ -e $fichierImplementation ] ; then
echo "Le fichier d'implementation $fichierImplementation existe. Voulez-vous l'ecraser ? (O/N)"
read reponse;
fi
if [ $reponse = "O" ] || [ $reponse = "o" ]; then
echo "Generation de $fichierImplementation"
touch $fichierImplementation
echo "//------------------------------------------------------------------------------
/** @file $nomFichierImplementation
* @brief $description
* @author $auteur
* @author Licence pro logiciel libre et proprietaire
* @since $dateCreation
* @version 0.1
* @date $dateCreation
* Description detaille� du fichier $nomFichierImplementation
*/
//------------------------------------------------------------------------------
// En-t�e propre �l'application ----------------------------------------------
// En-t�e propre �l'objet ----------------------------------------------------
#include \"${nomFichierEntete}\"
/** CONSTRUCTEURs
*
*/
${nomClasse}::${nomClasse}()
{
}
/** DESTRUCTEURs
*
*/
${nomClasse}::~${nomClasse}()
{
}
//---------------------------------------------------------------------------
// METHODEs PUBLIQUEs
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// METHODEs PRIVEEs
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// METHODEs PROTEGEEs
//---------------------------------------------------------------------------
" > $fichierImplementation;
fi
if [ -e $fichierTesteur ] ; then
echo "Le fichier de test $fichierTesteur existe. Voulez-vous l'ecraser ? (O/N)"
read reponse;
fi
if [ $reponse = "O" ] || [ $reponse = "o" ]; then
echo "Generation de $fichierTesteur"
touch $fichierTesteur
echo "//*********************************************************************
// Fichier : $nomFichierTesteur
// Classe : $nomClasse
//*********************************************************************
// $dateCreation : $auteur, Version initiale
//*********************************************************************
#include <iostream>
#include \"${nomFichierEntete}\"
using namespace std;
int main (int argc, char *argv[])
{
// Construction de la classe �tester
cout << \"Construction de la classe $nomClasse\" << endl;
$nomClasse *${nomClasseMin} = new ${nomClasse}();
return 0;
}
" > $fichierTesteur;
fi
if [ -e $fichierMakefile ] ; then
echo "********************** ATTENTION ! **********************"
echo "Le fichier Makefile existe. Voulez-vous l'ecraser ? (O/N)"
read reponse;
fi
if [ $reponse = "O" ] || [ $reponse = "o" ]; then
echo "Génération de $fichierMakefile"
touch $fichierMakefile
echo "
#############################################################################
# Makefile pour g��er : nom du programme
# Projet : nom du projet
# Date : $dateCreation
# Commande : make
#############################################################################
# Options de compilation
CFLAGS = -Wall -pedantic -g
# Options de linkage si n�essaire (ex -lm)
LIBS =
# Options de compilation sp�ifiques �QT
#QTFLAGS = -I\${QTDIR}include
# Options de linkage sp�ifique �QT
#QTLIBS = -L\${QTDIR}lib -lqt-mt
# Commande de compilation
CC = g++ \${CFLAGS}
# Commande de linkage
CCLINK = \${CC} \${LIBS}
# on place ici les objects �linker dans l'application finale
OBJECTS = ${nomClasse}.o
# on place ici les objets testeurs
TESTOBJECTS = ${nomClasseTesteur}.o
# on place ici les objets QT
#MOCOBJECTS =
# on rajoute ici les ex�utables �g��er
all : \${OBJECTS} \${TESTOBJECTS} \${MOCOBJECTS} $nomClasseTesteur
clean :
@rm -f *~ *.moc.cpp *.o
# r�le mod�is� pour la production des .o
%.o : %.cpp
\${CC} -c \$<
# r�le mod�is� pour la production des .moc.cpp sp�ifique �QT
%.moc.cpp : %.h
\${QTDIR}/bin/moc -o \$*.moc.cpp \$*.h
# r�le pour la production des ex�utables
$nomClasseTesteur : \${OBJECTS} ${nomClasseTesteur}.o
\${CCLINK} \${OBJECTS} \$@.o -o \$@
" > $fichierMakefile;
fi
fi #L'ERREUR EST ICI
if [extension == java]
nomFichierImplementation=${nomClasse}.java
fichierImplementation=${repertoireFichierSource}${nomFichierImplementation}
fichierMakefile=${repertoireFichierSource}Makefile
#Saisie des informations de l'ent�e
echo "Entrez une description sommaire de la classe"
read
description=$REPLY
direction=$HOME
auteur=$LOGNAME
dateCreation=$(date +%d" "%b" "%Y" "%X)
reponse="O"
if [ -e $fichierImplementation ] ; then
echo "Le fichier d'entete $fichierImplementation existe. Voulez-vous l'écraser ? (O/N)"
read reponse;
fi
if [ $reponse = "O" ] || [ $reponse = "o" ]; then
echo "Génération de $fichierImplementation"
touch $fichierImplementation
echo "//------------------------------------------------------------------------------
/** @file $nomFichierImplementation
* @brief $description
* @author $auteur
* @since $dateCreation
* @version 0.1
* @date $dateCreation
* @note Voir la description detaillée�explicité dans le fichier
* $nomFichierImplementation
*/
//------------------------------------------------------------------------------
//mettre le nom du pakage dans lequel il apartient!
package
// En-tetes standards necessaires dans ce fichier en-tete seulement ------------
// En-tetes propres �l'application necessaires dans ce fichier en-tete --------
public class $fichierImplementation
{
//---------------------------------------------------------------------------
// Attributs
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// METHODEs PUBLIQUEs
//---------------------------------------------------------------------------
public $fichierImplementation()
{
}
//---------------------------------------------------------------------------
// METHODEs PRIVEEs
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// METHODEs PROTEGEEs
//---------------------------------------------------------------------------"
if [ -e $fichierMakefile ] ; then
echo "********************** ATTENTION ! **********************"
echo "Le fichier Makefile existe. Voulez-vous l'ecraser ? (O/N)"
read reponse;
fi
if [ $reponse = "O" ] || [ $reponse = "o" ]; then
echo "G��ation de $fichierMakefile"
touch $fichierMakefile
echo "
#############################################################################
# Makefile pour générer : $nomFichierImplementation
# Projet : $fichierImplementation
# Date : $dateCreation
# Commande : make
#############################################################################
JAVAC =$direction/jdk1.5.0_06/bin/javac
JAVA =$direction/jdk1.5.0_06/bin/java
all:
$(JAVAC) $nomFichierImplementation
run:
$(JAVA) $fichierImplementation
clean:
find. -name "*.class" -exec rm {} \;"
fi
Marsh Posté le 20-02-2006 à 21:40:56
deja la ligne
Code :
|
ne marchera clairement pas sans le then.
Sinon pour chaque if respecte bien les espaces et nen met pas apres le 2eme crochet entre le ] et ;then
exemple :
Code :
|
ah oui tu peux mettre l'/les erreur(s) affichée(s) stp ?
Marsh Posté le 20-02-2006 à 21:48:21
j'ai changer de faconde faire, je passe maintenant par des fonction, qui appelle celle ci, donc les if posant probleme ne sont plus la, mais j'ai une nouvelle erreur a la fin de mon script, faut il terminer les fonction par une chose spécial?
Marsh Posté le 20-02-2006 à 21:53:51
en fait sa doit etre dans la fin du code , quand je genere le makefile que sa deconne
Marsh Posté le 20-02-2006 à 21:54:56
sans l'erreur affiché et les lignes du script qui plantent on peux pas trop taider.
Marsh Posté le 20-02-2006 à 21:58:41
revoila le nouveau script !!
Code :
|
voila les erreurs données :
rgelle@linux:~/script new> sh generer_squelette test
generer_squelette: line 355: syntax error near unexpected token `}'
generer_squelette: line 355: `}'
Marsh Posté le 20-02-2006 à 22:01:53
tu pourrais mettre le script dans des balises [cpp] parceque chopper la ligne 355 c'est chaud
mci
Marsh Posté le 20-02-2006 à 22:09:24
Code :
|
tu cherche a faire quoi la ?
on a un probleme de crochet, il peux etre a cause du echo mais je doute :|
Marsh Posté le 20-02-2006 à 22:12:13
ben je c pas car avant que je fasse le java, j'avait le cpp et sa marchait comme sa! non c pas sa?
Marsh Posté le 20-02-2006 à 22:20:15
je vien de modifier une petite erreur mais apparement sa ne venait pas de sa mon probleme
meme erreur meme endroit
Marsh Posté le 20-02-2006 à 23:05:38
voila j'ai corriger l'erreur, mais y'en a encore une:
Code :
|
[sirius.info-ua]:~ > sh generer_squelette test
generer_squelette: line 363: syntax error: unexpected end of file
tjrs pas pigé
Marsh Posté le 21-02-2006 à 04:01:43
J'ai l'a flemme de lire ton code, mais tu sais qu'au lieu de faire des gros echo "..." qui t'obligent a backslasher plein de trucs, tu peux faire :
cat <<EOF > fichier |
Marsh Posté le 21-02-2006 à 08:57:48
dsl mais je trouve que cette facon de générer les fichier est plus simple. car tout est dedans. mon probleme est tjrs dans la fonction java, mais je c pas ou, la est le probleme
Marsh Posté le 21-02-2006 à 09:11:43
line 364: syntax error: unexpected end of file cest que tu na pas fermé un crochet normalement.
Marsh Posté le 21-02-2006 à 09:13:36
je suis d'accord avec toi mais le probleme c'est que je ne voit pas ou! en regardant bien il ne me semble pas qu'il en manque!
Marsh Posté le 21-02-2006 à 09:22:39
j'ai toujours la même erreur:
[sirius.info-ua]:~ > sh generer_squelette test
generer_squelette: line 364: syntax error: unexpected end of file
Marsh Posté le 21-02-2006 à 11:16:35
Je vien d'isoler le code posant probleme l'erreur est bien dans ma classe java!
voila le code :
Code :
|
et l'erreur :
[sirius.info-ua]:~ > sh jav test
jav: line 136: syntax error: unexpected end of file
Marsh Posté le 21-02-2006 à 13:31:56
Je me demande si par hasard, il ne faudrait pas remplacer
if [ $reponse = "O" ] || [ $reponse = "o" ]; then |
par
if [[ $reponse = "O" ] || [ $reponse = "o" ]]; then |
Marsh Posté le 21-02-2006 à 14:00:52
j'ai deja essayer, et sa marche po mieux, deplus, il m'a été conseiller de ne pas faire comme ça!
Marsh Posté le 21-02-2006 à 14:03:25
sinon quand tu compare une variable avec une chaine de carractere, il faut mettre des guillements sur la variables sinon tu as des problemes.
if [ "$reponse" = "O" ] || [ "$reponse" = "o" ]; then
mais ce nest pas lerreur en cours, je la voit pas :|
Marsh Posté le 21-02-2006 à 14:13:40
ben vi c pour sa que je demande, moi non plus je la voie pas!
Marsh Posté le 21-02-2006 à 14:22:28
Je me demande si il y a pas un probleme avec sa!!
Code :
|
Marsh Posté le 21-02-2006 à 14:50:36
transistor49 a écrit : Sujet : boucle if |
Putain ça me fout les boules quand je vois quelqu'un parler de "boucle" pour un "if"...
Le "if" est une structure alternative non répétitive. Le "while", "until" et "for" sont des structures répétitives (donc des boucles).
La commande "break" sort de la boucle la plus proche. Si tu mets un "break" dans un "if" lui-même inclus dans un "while", ton "break" dépassera le "if" pour te faire quitter le "while" => le "if" n'est pas une boucle
transistor49 a écrit : je m'inicie au script shell |
Tu as un tutorial en français pour t'initier ici: http://fr.lang.free.fr/cours/Shell_v1.4.pdf
Marsh Posté le 20-02-2006 à 21:12:00
Bonjour,
je m'inicie au script shell, et je voudrait savoir si je peut imbriquer plusieur if ensemble, car j'ai une erreur a cette endroit!
voila en gro ma structure :
if
if
fi
if
fi
fi
merci