boucle if

boucle if - Shell/Batch - Programmation

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

Reply

Marsh Posté le 20-02-2006 à 21:12:00   

Reply

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.

Reply

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?

Reply

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

Reply

Marsh Posté le 20-02-2006 à 21:40:56    

deja la ligne

Code :
  1. if [extension == cpp]

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 :
  1. if [ "$var" = "true" ];then


ah oui tu peux mettre l'/les erreur(s) affichée(s) stp ?


Message édité par h4rold le 20-02-2006 à 21:41:33
Reply

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?

Reply

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

Reply

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.

Reply

Marsh Posté le 20-02-2006 à 21:58:41    

revoila le nouveau script !!
 
 

Code :
  1. #! /bin/sh
  2. if [ $# -ne 1 ]; then
  3. { echo "Syntaxe : $0 nom de la classe (première lettre en MAJUSCULE) "
  4.    echo ""
  5. } >&2
  6. exit 1
  7. fi
  8. extension=0
  9. while [[extension != cpp]||[extension != java]]
  10. do
  11. {
  12. echo "Entrez le langage voulu (cpp ou java)."
  13. read
  14. extension=$EXTENSION
  15. }done
  16. nomClasse=$1
  17. nomClasseMaj=$(echo $nomClasse | tr a-z A-Z)
  18. nomClasseMin=$(echo $nomClasse | tr A-Z a-z)
  19. nomClasseTesteur=${nomClasse}Testeur
  20. repertoireFichierSource=./src/
  21. function cpp()
  22. {
  23. nomFichierEntete=${nomClasse}.h
  24. nomFichierImplementation=${nomClasse}.cpp
  25. nomFichierTesteur=${nomClasse}Testeur.cpp
  26. fichierEntete=${repertoireFichierSource}${nomFichierEntete}
  27. fichierImplementation=${repertoireFichierSource}${nomFichierImplementation}
  28. fichierTesteur=${repertoireFichierSource}${nomFichierTesteur}
  29. fichierMakefile=${repertoireFichierSource}Makefile
  30. #Saisie des informations de l'ent�e
  31. echo "Entrez une description sommaire de la classe"
  32. read
  33. description=$REPLY
  34. auteur=$LOGNAME
  35. dateCreation=$(date +%d" "%b" "%Y" "%X)
  36. reponse="O"
  37. if [ -e $fichierEntete ] ; then
  38.  echo "Le fichier d'entete $fichierEntete existe. Voulez-vous l'écraser ? (O/N)"
  39.  read reponse;
  40. fi
  41. if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
  42.  echo "Génération de $fichierEntete"
  43.  touch $fichierEntete
  44.  echo "//------------------------------------------------------------------------------
  45. /** @file         $nomFichierEntete
  46. *  @brief        $description
  47. *  @author       $auteur
  48. *  @since        $dateCreation
  49. *  @version      0.1
  50. *  @date         $dateCreation
  51. *  @note         Voir la description detaillée�explicité dans le fichier
  52. *                $nomFichierImplementation
  53. */
  54. //------------------------------------------------------------------------------
  55. #ifndef _${nomClasseMaj}_H
  56. #define _${nomClasseMaj}_H
  57. // En-tetes standards necessaires dans ce fichier en-tete seulement ------------
  58. // En-tetes propres �l'application necessaires dans ce fichier en-tete --------
  59. class $nomClasse
  60. {
  61. private :
  62. public :
  63.  // CONSTRUCTEURs et DESTRUCTEURs
  64.  ${nomClasse}() ;
  65.  ~${nomClasse}() ;
  66. protected :
  67. } ;
  68. //------------------------------------------------------------------------------
  69. #endif  //_${nomClasseMaj}_H
  70. //------------------------------------------------------------------------------
  71. " > $fichierEntete;
  72. fi
  73. if [ -e $fichierImplementation ] ; then
  74.  echo "Le fichier d'implementation $fichierImplementation existe. Voulez-vous l'ecraser ? (O/N)"
  75.  read reponse;
  76. fi
  77. if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
  78. echo "Generation de $fichierImplementation"
  79. touch $fichierImplementation
  80. echo "//------------------------------------------------------------------------------
  81. /** @file         $nomFichierImplementation
  82. *  @brief        $description
  83. *  @author       $auteur
  84. *  @author       Licence pro logiciel libre et proprietaire
  85. *  @since        $dateCreation
  86. *  @version      0.1
  87. *  @date         $dateCreation
  88. *  Description detaille� du fichier $nomFichierImplementation
  89. */
  90. //------------------------------------------------------------------------------
  91. // En-t�e propre �l'application ----------------------------------------------
  92. // En-t�e propre �l'objet ----------------------------------------------------
  93. #include \"${nomFichierEntete}\"
  94. /** CONSTRUCTEURs
  95. *
  96. */
  97. ${nomClasse}::${nomClasse}()
  98. {
  99. }
  100. /** DESTRUCTEURs
  101. *
  102. */
  103. ${nomClasse}::~${nomClasse}()
  104. {
  105. }
  106. //---------------------------------------------------------------------------
  107. // METHODEs PUBLIQUEs
  108. //---------------------------------------------------------------------------
  109. //---------------------------------------------------------------------------
  110. // METHODEs PRIVEEs
  111. //---------------------------------------------------------------------------
  112. //---------------------------------------------------------------------------
  113. // METHODEs PROTEGEEs
  114. //---------------------------------------------------------------------------
  115. " > $fichierImplementation;
  116. fi
  117. if [ -e $fichierTesteur ] ; then
  118.  echo "Le fichier de test $fichierTesteur existe. Voulez-vous l'ecraser ? (O/N)"
  119.  read reponse;
  120. fi
  121. if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
  122.  echo "Generation de $fichierTesteur"
  123.  touch $fichierTesteur
  124.  echo "//*********************************************************************
  125. // Fichier : $nomFichierTesteur
  126. // Classe : $nomClasse
  127. //*********************************************************************
  128. // $dateCreation  : $auteur, Version initiale
  129. //*********************************************************************
  130. #include <iostream>
  131. #include \"${nomFichierEntete}\"
  132. using namespace std;
  133. int main (int argc, char *argv[])
  134. {
  135.     // Construction de la classe �tester
  136.     cout << \"Construction de la classe $nomClasse\" << endl;
  137.     $nomClasse *${nomClasseMin} = new ${nomClasse}();
  138.     return 0;
  139. }
  140. " > $fichierTesteur;
  141. fi
  142. if [ -e $fichierMakefile ] ; then
  143.  echo "********************** ATTENTION ! **********************"
  144.  echo "Le fichier Makefile existe. Voulez-vous l'ecraser ? (O/N)"
  145.  read reponse;
  146. fi
  147. if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
  148.  echo "Génération de $fichierMakefile"
  149.  touch $fichierMakefile
  150.  echo "
  151. #############################################################################
  152. # Makefile pour g��er : nom du programme
  153. # Projet : nom du projet
  154. # Date : $dateCreation
  155. # Commande : make
  156. #############################################################################
  157. # Options de compilation
  158. CFLAGS = -Wall -pedantic -g
  159. # Options de linkage si n�essaire (ex -lm)
  160. LIBS =
  161. # Options de compilation sp�ifiques �QT
  162. #QTFLAGS = -I\${QTDIR}include
  163. # Options de linkage sp�ifique �QT
  164. #QTLIBS = -L\${QTDIR}lib -lqt-mt
  165. # Commande de compilation
  166. CC = g++ \${CFLAGS}
  167. # Commande de linkage
  168. CCLINK = \${CC} \${LIBS}
  169. # on place ici les objects �linker dans l'application finale
  170. OBJECTS = ${nomClasse}.o
  171. # on place ici les objets testeurs
  172. TESTOBJECTS = ${nomClasseTesteur}.o
  173. # on place ici les objets QT
  174. #MOCOBJECTS =
  175. # on rajoute ici les ex�utables �g��er
  176. all : \${OBJECTS} \${TESTOBJECTS} \${MOCOBJECTS} $nomClasseTesteur
  177. clean :
  178. @rm -f *~ *.moc.cpp *.o
  179. # r�le mod�is� pour la production des .o
  180. %.o : %.cpp
  181. \${CC} -c \$<
  182. # r�le mod�is� pour la production des .moc.cpp sp�ifique �QT
  183. %.moc.cpp : %.h
  184. \${QTDIR}/bin/moc -o \$*.moc.cpp \$*.h
  185. # r�le pour la production des ex�utables
  186. $nomClasseTesteur : \${OBJECTS} ${nomClasseTesteur}.o
  187. \${CCLINK} \${OBJECTS} \$@.o -o \$@
  188. " > $fichierMakefile;
  189. fi
  190. }
  191. function java()
  192. {
  193. nomFichierImplementation=${nomClasse}.java
  194. fichierImplementation=${repertoireFichierSource}${nomFichierImplementation}
  195. fichierMakefile=${repertoireFichierSource}Makefile
  196. #Saisie des informations de l'ent�e
  197. echo "Entrez une description sommaire de la classe"
  198. read
  199. description=$REPLY
  200. direction=$HOME
  201. auteur=$LOGNAME
  202. dateCreation=$(date +%d" "%b" "%Y" "%X)
  203. reponse="O"
  204. if [ -e $fichierImplementation ] ; then
  205.  echo "Le fichier d'entete $fichierImplementation existe. Voulez-vous l'écraser ? (O/N)"
  206.  read reponse;
  207. fi
  208. if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
  209. echo "Génération de $fichierImplementation"
  210. touch $fichierImplementation
  211. echo "//------------------------------------------------------------------------------
  212. /** @file         $nomFichierImplementation
  213. *  @brief        $description
  214. *  @author       $auteur
  215. *  @since        $dateCreation
  216. *  @version      0.1
  217. *  @date         $dateCreation
  218. *  @note         Voir la description detaillée�explicité dans le fichier
  219. *                $nomFichierImplementation
  220. */
  221. //------------------------------------------------------------------------------
  222. //mettre le nom du pakage dans lequel il apartient!
  223. package
  224. // En-tetes standards necessaires dans ce fichier en-tete seulement ------------
  225. // En-tetes propres �l'application necessaires dans ce fichier en-tete --------
  226. public class $fichierImplementation
  227. {
  228. //---------------------------------------------------------------------------
  229. // Attributs
  230. //---------------------------------------------------------------------------
  231. //---------------------------------------------------------------------------
  232. // METHODEs PUBLIQUEs
  233. //---------------------------------------------------------------------------
  234. public $fichierImplementation()
  235. {
  236. }
  237. //---------------------------------------------------------------------------
  238. // METHODEs PRIVEEs
  239. //---------------------------------------------------------------------------
  240. //---------------------------------------------------------------------------
  241. // METHODEs PROTEGEEs
  242. //---------------------------------------------------------------------------"
  243. if [ -e $fichierMakefile ] ; then
  244. echo "********************** ATTENTION ! **********************"
  245. echo "Le fichier Makefile existe. Voulez-vous l'ecraser ? (O/N)"
  246. read reponse;
  247. fi
  248. if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
  249. echo "Génération de $fichierMakefile"
  250. touch $fichierMakefile
  251. echo "
  252. #############################################################################
  253. # Makefile pour générer : $nomFichierImplementation
  254. # Projet : $fichierImplementation
  255. # Date : $dateCreation
  256. # Commande : make
  257. #############################################################################
  258. JAVAC =$direction/jdk1.5.0_06/bin/javac
  259. JAVA =$direction/jdk1.5.0_06/bin/java
  260. all:
  261. $(JAVAC) $nomFichierImplementation
  262. run:
  263. $(JAVA) $fichierImplementation
  264. clean:
  265. find. -name \"*.class\" -exec rm {} \;"
  266. fi
  267. } #ERREUR ICI
  268. if [ extension = cpp] ; then
  269. {
  270. cpp
  271. }
  272. else
  273. {
  274. java
  275. }
  276. fi


 
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: `}'


Message édité par transistor49 le 20-02-2006 à 22:19:20
Reply

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  :sol:


Message édité par h4rold le 20-02-2006 à 22:02:12
Reply

Marsh Posté le 20-02-2006 à 22:01:53   

Reply

Marsh Posté le 20-02-2006 à 22:04:06    

et voila sorry!

Reply

Marsh Posté le 20-02-2006 à 22:09:24    


 

Code :
  1. nomFichierImplementation=${nomClasse}.java    fichierImplementation=${repertoireFichierSource}${nomFichierImplementation}    fichierMakefile=${repertoireFichierSource}Makefile


tu cherche a faire quoi la ?
on a un probleme de crochet, il peux etre a cause du echo mais je doute :|


Message édité par h4rold le 20-02-2006 à 22:10:27
Reply

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?

Reply

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

Reply

Marsh Posté le 20-02-2006 à 23:05:38    

voila j'ai corriger l'erreur, mais y'en a encore une:

Code :
  1. #! /bin/sh
  2. if [ $# -ne 1 ]; then
  3. { echo "Syntaxe : $0 nom de la classe (première lettre en MAJUSCULE) "
  4.    echo ""
  5. } >&2
  6. exit 1
  7. fi
  8. extension=0
  9. while [[extension != cpp]||[extension != java]] ; do
  10. {
  11. echo "Entrez le langage voulu (cpp ou java)."
  12. read
  13. extension=$EXTENSION
  14. }done
  15. nomClasse=$1
  16. nomClasseMaj=$(echo $nomClasse | tr a-z A-Z)
  17. nomClasseMin=$(echo $nomClasse | tr A-Z a-z)
  18. nomClasseTesteur=${nomClasse}Testeur
  19. repertoireFichierSource=./src/
  20. function cpp()
  21. {
  22. nomFichierEntete=${nomClasse}.h
  23. nomFichierImplementation=${nomClasse}.cpp
  24. nomFichierTesteur=${nomClasse}Testeur.cpp
  25. fichierEntete=${repertoireFichierSource}${nomFichierEntete}
  26. fichierImplementation=${repertoireFichierSource}${nomFichierImplementation}
  27. fichierTesteur=${repertoireFichierSource}${nomFichierTesteur}
  28. fichierMakefile=${repertoireFichierSource}Makefile
  29. #Saisie des informations de l'ent�e
  30. echo "Entrez une description sommaire de la classe"
  31. read note
  32. description=$REPLY
  33. auteur=$LOGNAME
  34. dateCreation=$(date +%d" "%b" "%Y" "%X)
  35. reponse="O"
  36. if [ -e $fichierEntete ] ; then
  37.  echo "Le fichier d'entete $fichierEntete existe. Voulez-vous l'écraser ? (O/N)"
  38.  read reponse;
  39. fi
  40. if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
  41.  echo "Génération de $fichierEntete"
  42.  touch $fichierEntete
  43.  echo "//------------------------------------------------------------------------------
  44. /** @file         $nomFichierEntete
  45. *  @brief        $description
  46. *  @author       $auteur
  47. *  @since        $dateCreation
  48. *  @version      0.1
  49. *  @date         $dateCreation
  50. *  @note         $note
  51. *                plus de détaille dans : $nomFichierImplementation
  52. */
  53. //------------------------------------------------------------------------------
  54. #ifndef _${nomClasseMaj}_H
  55. #define _${nomClasseMaj}_H
  56. // En-tetes standards necessaires dans ce fichier en-tete seulement ------------
  57. // En-tetes propres à l'application necessaires dans ce fichier en-tete --------
  58. class $nomClasse
  59. {
  60. private :
  61. public :
  62.  // CONSTRUCTEURs et DESTRUCTEURs
  63.  ${nomClasse}() ;
  64.  ~${nomClasse}() ;
  65. protected :
  66. } ;
  67. //------------------------------------------------------------------------------
  68. #endif  //_${nomClasseMaj}_H
  69. //------------------------------------------------------------------------------
  70. " > $fichierEntete;
  71. fi
  72. if [ -e $fichierImplementation ] ; then
  73.  echo "Le fichier d'implementation $fichierImplementation existe. Voulez-vous l'ecraser ? (O/N)"
  74.  read reponse;
  75. fi
  76. if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
  77. echo "Generation de $fichierImplementation"
  78. touch $fichierImplementation
  79. echo "//------------------------------------------------------------------------------
  80. /** @file         $nomFichierImplementation
  81. *  @brief        $description
  82. *  @author       $auteur
  83. *  @author       Licence pro logiciel libre et proprietaire
  84. *  @since        $dateCreation
  85. *  @version      0.1
  86. *  @date         $dateCreation
  87. *  Description detaillee du fichier $nomFichierImplementation
  88. *                $note
  89. */
  90. //------------------------------------------------------------------------------
  91. // En-tete propre à l'application ----------------------------------------------
  92. // En-tete propre à l'objet ----------------------------------------------------
  93. #include \"${nomFichierEntete}\"
  94. /** CONSTRUCTEURs
  95. *
  96. */
  97. ${nomClasse}::${nomClasse}()
  98. {
  99. }
  100. /** DESTRUCTEURs
  101. *
  102. */
  103. ${nomClasse}::~${nomClasse}()
  104. {
  105. }
  106. //---------------------------------------------------------------------------
  107. // METHODEs PUBLIQUEs
  108. //---------------------------------------------------------------------------
  109. //---------------------------------------------------------------------------
  110. // METHODEs PRIVEEs
  111. //---------------------------------------------------------------------------
  112. //---------------------------------------------------------------------------
  113. // METHODEs PROTEGEEs
  114. //---------------------------------------------------------------------------
  115. " > $fichierImplementation;
  116. fi
  117. if [ -e $fichierTesteur ] ; then
  118.  echo "Le fichier de test $fichierTesteur existe. Voulez-vous l'ecraser ? (O/N)"
  119.  read reponse;
  120. fi
  121. if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
  122.  echo "Generation de $fichierTesteur"
  123.  touch $fichierTesteur
  124.  echo "//*********************************************************************
  125. // Fichier : $nomFichierTesteur
  126. // Classe : $nomClasse
  127. //*********************************************************************
  128. // $dateCreation  : $auteur, Version initiale
  129. //*********************************************************************
  130. #include <iostream>
  131. #include \"${nomFichierEntete}\"
  132. using namespace std;
  133. int main (int argc, char *argv[])
  134. {
  135.     // Construction de la classe à tester
  136.     cout << \"Construction de la classe $nomClasse\" << endl;
  137.     $nomClasse *${nomClasseMin} = new ${nomClasse}();
  138.     return 0;
  139. }
  140. " > $fichierTesteur;
  141. fi
  142. if [ -e $fichierMakefile ] ; then
  143.  echo "********************** ATTENTION ! **********************
  144. Le fichier Makefile existe. Voulez-vous l'ecraser ? (O/N)"
  145.  read reponse;
  146. fi
  147. if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
  148.  echo "Génération de $fichierMakefile"
  149.  touch $fichierMakefile
  150.  echo "#############################################################################
  151. # Makefile pour generer : $nomFichierImplementation
  152. # Projet : nom du projet
  153. # Date : $dateCreation
  154. # Commande : make
  155. #############################################################################
  156. # Options de compilation
  157. CFLAGS = -Wall -pedantic -g
  158. # Options de linkage si nécessaire (ex -lm)
  159. LIBS =
  160. # Options de compilation spécifiques à QT
  161. #QTFLAGS = -I\${QTDIR}include
  162. # Options de linkage spécifique à QT
  163. #QTLIBS = -L\${QTDIR}lib -lqt-mt
  164. # Commande de compilation
  165. CC = g++ \${CFLAGS}
  166. # Commande de linkage
  167. CCLINK = \${CC} \${LIBS}
  168. # on place ici les objects à linker dans l'application finale
  169. OBJECTS = ${nomClasse}.o
  170. # on place ici les objets testeurs
  171. TESTOBJECTS = ${nomClasseTesteur}.o
  172. # on place ici les objets QT
  173. #MOCOBJECTS =
  174. # on rajoute ici les executables à générer
  175. all : \${OBJECTS} \${TESTOBJECTS} \${MOCOBJECTS} $nomClasseTesteur
  176. clean :
  177. @rm -f *~ *.moc.cpp *.o
  178. # role modelisée pour la production des .o
  179. %.o : %.cpp
  180. \${CC} -c \$<
  181. # role modeise pour la production des .moc.cpp spéifique à QT
  182. %.moc.cpp : %.h
  183. \${QTDIR}/bin/moc -o \$*.moc.cpp \$*.h
  184. # role pour la production des exécutables
  185. $nomClasseTesteur : \${OBJECTS} ${nomClasseTesteur}.o
  186. \${CCLINK} \${OBJECTS} \$@.o -o \$@
  187. " > $fichierMakefile;
  188. fi
  189. }
  190. function java()
  191. {
  192. nomFichierImplementation=${nomClasse}.java
  193. fichierImplementation=${repertoireFichierSource}${nomFichierImplementation}
  194. fichierMakefile=${repertoireFichierSource}Makefile
  195. #Saisie des informations de l'entete
  196. echo "Entrez une description sommaire de la classe"
  197. read note
  198. description=$REPLY
  199. direction=$HOME
  200. auteur=$LOGNAME
  201. dateCreation=$(date +%d" "%b" "%Y" "%X)
  202. reponse="O"
  203. if [ -e $fichierImplementation ] ; then
  204.  echo "Le fichier d'entete $fichierImplementation existe. Voulez-vous l'écraser ? (O/N)"
  205.  read reponse;
  206. fi
  207. if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
  208. echo "Génération de $fichierImplementation"
  209. touch $fichierImplementation
  210. echo "//------------------------------------------------------------------------------
  211. /** @file         $nomFichierImplementation
  212. *  @brief        $description
  213. *  @author       $auteur
  214. *  @since        $dateCreation
  215. *  @version      0.1
  216. *  @date         $dateCreation
  217. *  @note         $note
  218. *                plus de détaille dans : $nomFichierImplementation
  219. */
  220. //------------------------------------------------------------------------------
  221. //mettre le nom du pakage dans lequel il apartient!
  222. package
  223. // En-tetes standards necessaires dans ce fichier en-tete seulement ------------
  224. // En-tetes propres à l'application necessaires dans ce fichier en-tete --------
  225. public class $fichierImplementation
  226. {
  227. //---------------------------------------------------------------------------
  228. // Attributs
  229. //---------------------------------------------------------------------------
  230. //---------------------------------------------------------------------------
  231. // METHODEs PUBLIQUEs
  232. //---------------------------------------------------------------------------
  233. public $fichierImplementation()
  234. {
  235. }
  236. //---------------------------------------------------------------------------
  237. // METHODEs PRIVEEs
  238. //---------------------------------------------------------------------------
  239. //---------------------------------------------------------------------------
  240. // METHODEs PROTEGEEs
  241. //---------------------------------------------------------------------------
  242. }
  243. "> $fichierImplementation;
  244. fi
  245. if [ -e $fichierMakefile ] ; then
  246.  echo "********************** ATTENTION ! **********************
  247. Le fichier Makefile existe. Voulez-vous l'ecraser ? (O/N)"
  248.  read reponse;
  249. fi
  250. if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
  251.  echo "Generation de $fichierMakefile "
  252.  touch $fichierMakefile
  253.  echo"#############################################################################
  254. # Makefile pour générer : $nomFichierImplementation
  255. # Projet : $fichierImplementation
  256. # Date : $dateCreation
  257. # Commande : make
  258. #############################################################################
  259. #ici, il faudra modifire le répertoire de votre jdk!!
  260. JAVAC = $direction/jdk1.5.0_06/bin/javac
  261. JAVA = $direction/jdk1.5.0_06/bin/java
  262. all:
  263. \$(JAVAC) $nomFichierImplementation
  264. run:
  265. \$(JAVA) $fichierImplementation
  266. clean:
  267. find. -name \"*.class\" -exec rm {} \;
  268. " > $fichierMakefile;
  269. fi
  270. }
  271. if [ extension = cpp ] ; then
  272. cpp
  273. else
  274. java
  275. fi


 
[sirius.info-ua]:~ > sh generer_squelette test
generer_squelette: line 363: syntax error: unexpected end of file
tjrs pas pigé


Message édité par transistor49 le 21-02-2006 à 09:53:00
Reply

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
toto "titi" tata
tutu $var
EOF


Message édité par matafan le 21-02-2006 à 04:02:34
Reply

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

Reply

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.

Reply

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!

Reply

Marsh Posté le 21-02-2006 à 09:15:18    

essaie den rajouter un a la fin pour voir

Reply

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

Reply

Marsh Posté le 21-02-2006 à 09:54:15    

je vien de remettre a jour le fichier ainsi qu l'erreur

Reply

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 :
  1. #!/bin/sh
  2. #vérification du parametre
  3. if [ $# -ne 1 ]; then
  4. {
  5. echo "Syntaxe : $0 nom de la classe (premiere lettre en MAJUSCULE) "
  6. echo ""
  7. } >&2
  8. exit 1
  9. fi
  10. #mise a zéro de l'extension
  11. extension="0"
  12. #vérification du paramètre entré
  13. while [ $extension != "cpp" ] || [ $extension != "java" ] ; do
  14. {
  15. echo "Entrez le langage voulu (cpp ou java)."
  16. read extension;
  17. extension = $EXTENSION
  18. }done
  19. #initialisation de toute les variables
  20. nomClasse=$1
  21. nomClasseMaj=$(echo $nomClasse | tr a-z A-Z)
  22. nomClasseMin=$(echo $nomClasse | tr A-Z a-z)
  23. nomClasseTesteur=${nomClasse}Testeur
  24. repertoireFichierSource=./src/
  25. #main du script
  26. jav
  27. #fonction java
  28. function jav()
  29. {
  30. nomFichierImplementation=${nomClasse}.java
  31. fichierImplementation=${repertoireFichierSource}${nomFichierImplementation}
  32. fichierMakefile=${repertoireFichierSource}Makefile
  33. #Saisie des informations de l'entete
  34. echo "Entrez une description sommaire de la classe"
  35. read note;
  36. description=$REPLY
  37. direction=$HOME
  38. auteur=$LOGNAME
  39. dateCreation=$(date +%d" "%b" "%Y" "%X)
  40. reponse="O"
  41. if [ -e $fichierImplementation ] ; then
  42.  echo "Le fichier d'entete $fichierImplementation existe. Voulez-vous l'écraser ? (O/N)"
  43.  read reponse;
  44. fi
  45. if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
  46. echo "Génération de $fichierImplementation"
  47. touch $fichierImplementation
  48. echo "//------------------------------------------------------------------------------
  49. /** @file         $nomFichierImplementation
  50. *  @brief        $description
  51. *  @author       $auteur
  52. *  @since        $dateCreation
  53. *  @version      0.1
  54. *  @date         $dateCreation
  55. *  @note         $note
  56. *                plus de détaille dans : $nomFichierImplementation
  57. */
  58. //------------------------------------------------------------------------------
  59. //mettre le nom du pakage dans lequel il apartient!
  60. package
  61. // En-tetes standards necessaires dans ce fichier en-tete seulement ------------
  62. // En-tetes propres à l'application necessaires dans ce fichier en-tete --------
  63. public class $fichierImplementation
  64. {
  65. //---------------------------------------------------------------------------
  66. // Attributs
  67. //---------------------------------------------------------------------------
  68. //---------------------------------------------------------------------------
  69. // METHODEs PUBLIQUEs
  70. //---------------------------------------------------------------------------
  71. public $fichierImplementation()
  72. {
  73. }
  74. //---------------------------------------------------------------------------
  75. // METHODEs PRIVEEs
  76. //---------------------------------------------------------------------------
  77. //---------------------------------------------------------------------------
  78. // METHODEs PROTEGEEs
  79. //---------------------------------------------------------------------------
  80. }"> $fichierImplementation;
  81. fi
  82. if [ -e $fichierMakefile ] ; then
  83.  echo "********************** ATTENTION ! **********************
  84. Le fichier Makefile existe. Voulez-vous l'ecraser ? (O/N)"
  85.  read reponse;
  86. fi
  87. if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
  88.  echo "Generation de $fichierMakefile "
  89.  touch $fichierMakefile
  90.  echo "#############################################################################
  91. # Makefile pour générer : $nomFichierImplementation
  92. # Projet : $fichierImplementation
  93. # Date : $dateCreation
  94. # Commande : make
  95. #############################################################################
  96. #ici, il faudra modifire le répertoire de votre jdk!!
  97. JAVAC = $direction/jdk1.5.0_06/bin/javac
  98. JAVA = $direction/jdk1.5.0_06/bin/java
  99. all:
  100. \$(JAVAC) $nomFichierImplementation
  101. run:
  102. \$(JAVA) $fichierImplementation
  103. clean:
  104. find. -name \"*.class\" -exec rm {} \;
  105. " > $fichierMakefile;
  106. fi
  107. }


 
et l'erreur :
[sirius.info-ua]:~ > sh jav test
jav: line 136: syntax error: unexpected end of file


Message édité par transistor49 le 21-02-2006 à 14:11:34
Reply

Marsh Posté le 21-02-2006 à 13:31:56    

:hello:  
Je me demande si par hasard, il ne faudrait pas remplacer
 

 if  [ $reponse = "O" ] || [ $reponse = "o" ]; then

par
 

 if  [[ $reponse = "O" ] || [ $reponse = "o" ]]; then

Reply

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!

Reply

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 :|

Reply

Marsh Posté le 21-02-2006 à 14:13:40    

ben vi c pour sa que je demande, moi non plus je la voie pas!

Reply

Marsh Posté le 21-02-2006 à 14:22:28    

Je me demande si il y a pas un probleme avec sa!!

Code :
  1. echo "#############################################################################
  2. # Makefile pour generer : $nomFichierImplementation
  3. # Projet : $fichierImplementation
  4. # Date : $dateCreation
  5. # Commande : make
  6. #############################################################################
  7. #ici, il faudra modifire le repertoire de votre jdk!!
  8. JAVAC = $direction/jdk1.5.0_06/bin/javac
  9. JAVA = $direction/jdk1.5.0_06/bin/java
  10. all:
  11. \$(JAVAC) $nomFichierImplementation
  12. run:
  13. \$(JAVA) $fichierImplementation
  14. clean:
  15. find. -name \"*.class\" -exec rm {} \;
  16. " > $fichierMakefile;


Reply

Marsh Posté le 21-02-2006 à 14:40:16    

j'ai trouver, sa venait de ma boucle for, faut pas d'{}

Reply

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


Message édité par Sve@r le 21-02-2006 à 14:51:36

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed