IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Script shell


Sujet :

Linux

  1. #1
    Membre régulier Avatar de transistor49
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 184
    Points : 95
    Points
    95
    Par défaut Script shell
    bonjour, j'ai un petit probleme pour écrire un script shelle, il me met une erreur bizar
    voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    #! /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/
     
    function 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 note
    	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         $note
     *                plus de détaille dans : $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 detaillee du fichier $nomFichierImplementation
     *                $note
     */
    //------------------------------------------------------------------------------
     
    // En-tete propre à l'application ----------------------------------------------
     
    // En-tete 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 ! **********************
    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 generer : $nomFichierImplementation
    # Projet : nom du projet
    # Date : $dateCreation
    # Commande : make
    #############################################################################
     
    # Options de compilation
    CFLAGS = -Wall -pedantic -g
     
    # Options de linkage si nécessaire (ex -lm)
    LIBS =
     
    # Options de compilation spécifiques à QT
    #QTFLAGS = -I\${QTDIR}include
     
    # Options de linkage spécifique à 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 executables à générer
    all : \${OBJECTS} \${TESTOBJECTS} \${MOCOBJECTS} $nomClasseTesteur
     
    clean :
    	@rm -f *~ *.moc.cpp *.o
     
    # role modelisée pour la production des .o
    %.o : %.cpp
    	\${CC} -c \$<
     
    # role modeise pour la production des .moc.cpp spéifique à QT
    %.moc.cpp : %.h
    	\${QTDIR}/bin/moc -o \$*.moc.cpp \$*.h
     
    # role pour la production des exécutables
    $nomClasseTesteur : \${OBJECTS} ${nomClasseTesteur}.o
    	\${CCLINK} \${OBJECTS} \$@.o -o \$@
     
    " > $fichierMakefile;
    	fi
    }
     
    function java()
    {
    	nomFichierImplementation=${nomClasse}.java
    	fichierImplementation=${repertoireFichierSource}${nomFichierImplementation}
    	fichierMakefile=${repertoireFichierSource}Makefile
     
    	#Saisie des informations de l'entete
     
    	echo "Entrez une description sommaire de la classe"
    	read note
    	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         $note
     *                plus de détaille dans : $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
    //---------------------------------------------------------------------------
    }
    "> $fichierImplementation;
    	fi
     
    	if [ -e $fichierMakefile ] ; then
    		echo "********************** ATTENTION ! **********************
    Le fichier Makefile existe. Voulez-vous l'ecraser ? (O/N)"
    		read reponse;
    	fi
     
    	if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
    		echo "Generation de $fichierMakefile "
    		touch $fichierMakefile
    		echo"#############################################################################
    # Makefile pour générer : $nomFichierImplementation
    # Projet : $fichierImplementation
    # Date : $dateCreation
    # Commande : make
    #############################################################################
    #ici, il faudra modifire le répertoire de votre jdk!!
    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 {} \; 
    " > $fichierMakefile;
     
    	fi
    }
     
    if [ extension = cpp ] ; then
    	cpp
    else
    	java
    fi
    et voila mon erreur:
    [sirius.info-ua]:~ > sh generer_squelette test
    generer_squelette: line 363: syntax error: unexpected end of file
    la je comprend vraiment pas
    sachant que je n'ai que 362 ligne de code, si il y a une erreur c'est dans la classe java!!

    merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    As tu essayé de rajouter un retour à la ligne à la fin de ton script ?

  3. #3
    Membre régulier Avatar de transistor49
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 184
    Points : 95
    Points
    95
    Par défaut
    oui, j'ai deja rajouter un retour a la ligne, un } mais sa me génere tout le temps la meme erreur!

  4. #4
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Le message d'erreur n'indique pas une localisation pertinente ...

    "Unexpected end of file", cela signifie simplement que la grammaire du shell n'est pas respectée et que la fin du fichier est atteinte alors que le shell croit encore être à l'intérieur d'une expression ou d'une boucle.

    Las seules solutions, dans ce cas, consistent à :
    • - diviser le script en parties plus petites à tester indépendemment les unes des autres pour localiser l'erreur, ou bien
      - tout relire du début en vérifiant bien que toute ouverture d'expression, bloc ou boucle reçoit bien sa fermeture


    ... voire à faire les deux à la fois.

    En le faisant, je tombe dès le début sur ce bloc suspect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while [[extension != cpp]||[extension != java]] ; do
    {
       echo "Entrez le langage voulu (cpp ou java)."
       read
       extension=$EXTENSION
    }done
    Ce n'est même plus de la suspiscion : il est coupable à plusieurs titres :
    • - tu mélange allègrement les opérateurs [[ ]] du bash et l'abréviation [ ] de l'opérateur test
      - ton test est fait sur "extension" qui n'est pas une variable valide. $extension serait de meilleur aloi
      - ton read ne fournit rien ... d'où peut bien sortir le $EXTENSION, alors ?
      - ta condition dans le while n'est pas correcte ... ta boucle tournera tant que l'extension sera différente de cpp OU de java. Or java est différent de cpp ---> boucle infinie
      - Les accolades de bloc sont superflues avec le bloc explicite do/done
      - ...


    Ce bloc mériterait, au moins, une ré-écriture ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while [[ "$extension" != cpp && "$extension" != java ]]
    do
       echo "Entrez le langage voulu (cpp ou java)."
       read extension
    done
    Maintenant, il a peut être des complices que je te laisse le soin de rechercher ... le script est trop long pour moi

  5. #5
    Membre régulier Avatar de transistor49
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 184
    Points : 95
    Points
    95
    Par défaut
    Merci, j'ai corriger pas mal de truc grace a toi!
    j'ai fait comme tu as dit, j'ai céparer les fonction, et l'erreur est dans ma fonction jav.
    voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    #!/bin/sh
     
    #vérification du parametre
    if [ $# -ne 1 ]; then
     { 
    	echo "Syntaxe : $0 nom de la classe (premiere lettre en MAJUSCULE) "
    	echo ""
     } >&2
     exit 1
    fi
     
    #mise a zéro de l'extension
    extension="0"
     
    #vérification du paramètre entré
    while [ $extension != cpp ] || [ $extension != java ] ; do
    {
    	echo "Entrez le langage voulu (cpp ou java)."
    	read extension;
    	extension = $EXTENSION
    }done
     
    #initialisation de toute les variables
    nomClasse=$1
    nomClasseMaj=$(echo $nomClasse | tr a-z A-Z)
    nomClasseMin=$(echo $nomClasse | tr A-Z a-z)
    nomClasseTesteur=${nomClasse}Testeur
    repertoireFichierSource=./src/
     
    #fonction java
    function jav()
    {
    	nomFichierImplementation=${nomClasse}.java
    	fichierImplementation=${repertoireFichierSource}${nomFichierImplementation}
    	fichierMakefile=${repertoireFichierSource}Makefile
     
    	#Saisie des informations de l'entete
     
    	echo "Entrez une description sommaire de la classe"
    	read note;
    	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         $note
     *                plus de détaille dans : $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
    //---------------------------------------------------------------------------
    }"> $fichierImplementation;
    	fi
     
    	if [ -e $fichierMakefile ] ; then
    		echo "********************** ATTENTION ! **********************
    Le fichier Makefile existe. Voulez-vous l'ecraser ? (O/N)"
    		read reponse;
    	fi
     
    	if  [ $reponse = "O" ] || [ $reponse = "o" ]; then
    		echo "Generation de $fichierMakefile "
    		touch $fichierMakefile
    		echo "#############################################################################
    # Makefile pour générer : $nomFichierImplementation
    # Projet : $fichierImplementation
    # Date : $dateCreation
    # Commande : make
    #############################################################################
    #ici, il faudra modifire le répertoire de votre jdk!!
    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 {} \; 
    " > $fichierMakefile;
    	fi
    }
     
    #main du script
     
    jav
    et l'erreur :
    [sirius.info-ua]:~ > sh jav test
    jav: line 136: syntax error: unexpected end of file

  6. #6
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Tu appelles une fonction, puis tu la déclares.
    ça ne devrait pas être l'inverse ?

    Plutôt que de faire un echo géant, tu devrais utiliser la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cat << EOF
    blablabla
    EOF
    ça te permet d'avoir un code propre, et pas backslashé dans tous les sens pour protéger tes caractères spéciaux.

  7. #7
    Membre régulier Avatar de transistor49
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 184
    Points : 95
    Points
    95
    Par défaut
    je l'ai mis en haut masi sa ne me change pas le probleme si je les met en bas,sa me donne le meme chose, la meme erreur! mais je vais modifier si tu veut

  8. #8
    Membre régulier Avatar de transistor49
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 184
    Points : 95
    Points
    95
    Par défaut
    Je me demande si il y a pas un probleme avec sa!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    	echo "#############################################################################
    # Makefile pour generer : $nomFichierImplementation
    # Projet : $fichierImplementation
    # Date : $dateCreation
    # Commande : make
    #############################################################################
    #ici, il faudra modifire le repertoire de votre jdk!!
    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 {} \; 
    " > $fichierMakefile;

  9. #9
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Tu n'as pas lu toutes mes corrections ...

    Du coup, l'erreur se trouve toujours dans ton premier bloc while !!!!

    Si tu ne fais rien des sorties, pas de redirections, les { et } sont superflues entre do et done. Pas la peine de définir un bloc dans un bloc ... Mais si tu tiens vraiment à en mettre, laisse un blanc entre } et done, ça t'évitera cette erreur bloquante.

    Tu fais ensuite un read extension suivi d'un extension = $EXTENSION. Outre que le shell n'aime pas du tout les blancs autour du = d'affectation, tu en profite pour écraser la valeur lue par le read, avec le contenu d'une variable non initialisée. Boucle infinie garantie, de nouveau !

    De plus, tu n'as pas tenu compte de ce que j'ai dit sur le test de ton while. Tu testes si l'extension est différente de cpp OU différente de java. Ce n'est pas bon car si elle est égale à l'un, elle est différente de l'autre, ta condition est vraie et tu repars pour une boucle !!! Il faut tester si elle est différente de l'un ET différente de l'autre. Il existe au moins trois façons de le faire :
    • - avec un && entre les deux tests [ ]
      - avec un seul test [ ] mais dont les deux différences sont séparées par un opérateur -a
      - comme je l'ai déjà fait, avec un test [[ ]]


    Sinon, pour simplifier, tu n'as pas besoin de mettre extension à "0" au préalable si tu fais tes tests en encadrant variables et valeurs de tests avec des "".

    Ceci est valide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/sh
     
    #vérification du paramètre entré
    while [[ "$extension" != "cpp" && "$extension" != "java" ]] ; do
    {
       echo "Entrez le langage voulu (cpp ou java)."
       read extension;
    } done

  10. #10
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par transistor49
    Je me demande si il y a pas un probleme avec sa!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	echo "####[snip]
    " > $fichierMakefile;
    Problème, peut être, mais le conseil de ggnore à ce sujet est tout à fait pertinent !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cat << EOF > $fichierMakefile
    ####
    [snip]
    find. -name \"*.class\" -exec rm {} \;
    EOF

  11. #11
    Membre régulier Avatar de transistor49
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 184
    Points : 95
    Points
    95
    Par défaut
    j'ai réussi a résoudre mon probleme, c'était dans la boucle for il ne fallait pas de {}.
    j'en ai un autree, le != ne fonctionne pas top on peu pas faire autre chose?

  12. #12
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par 2Eurocents
    Citation Envoyé par transistor49
    Je me demande si il y a pas un probleme avec sa!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	echo "####[snip]
    " > $fichierMakefile;
    Problème, peut être, mais le conseil de ggnore à ce sujet est tout à fait pertinent !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cat << EOF > $fichierMakefile
    ####
    [snip]
    find. -name \"*.class\" -exec rm {} \;
    EOF

    Le cat<<EOF...EOF implique aussi la suppression des protections par backslash.

    Ce qu'il faut que tu comprennes transistor49, c'est que ça n'est pas juste pour étaler mes petites connaissances que je te parle de cette façon de faire.

    Elle simplifie grandement l'écriture, et donc la relecture et donc ... roulements de tambour ... le débuggage !

  13. #13
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par transistor49
    j'ai réussi a résoudre mon probleme, c'était dans la boucle for il ne fallait pas de {}.
    Il y a plein d'endroit où les {} sont superflus !!
    Citation Envoyé par transistor49
    j'en ai un autree, le != ne fonctionne pas top on peu pas faire autre chose?
    J'espère bien que les != fonctionnent !!!!
    Par contre, ta conjonction entre les tests n'est pas correcte ... si tu ne l'as pas changée.

  14. #14
    Membre régulier Avatar de transistor49
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2005
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 184
    Points : 95
    Points
    95
    Par défaut
    ha oui exact, je vien d'enlever la boucle for pou un test plus simple, et c bon!!
    tout marche merci a tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script shell
    Par anzar dans le forum Linux
    Réponses: 4
    Dernier message: 03/12/2004, 14h41
  2. [JSP] script shell
    Par goolix dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/08/2004, 09h08
  3. Exécution d'un script shell
    Par Manu0086 dans le forum Linux
    Réponses: 8
    Dernier message: 15/06/2004, 16h31
  4. Explication script shell
    Par crasho007 dans le forum Linux
    Réponses: 2
    Dernier message: 14/06/2004, 13h54
  5. Cron + terminal + script shell
    Par nicolas.pissard dans le forum Linux
    Réponses: 3
    Dernier message: 17/03/2004, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo