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

Shell et commandes GNU Discussion :

Problème de if / fi


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Par défaut Problème de if / fi
    Bonjour,

    j'ai le code suivant mais j'ai une erreur : "problème de fi"...
    Je ne me souviens pas exactement de l'intitulé mais ça concernant le "fi" juste avant le "else"...

    Je ne m'y connais pas trop mais je ne vois pas où pourrait se trouver l'erreur :/

    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
     
    #!/bin/ksh 
    # script TEST.sh
     
    numsoc=1 
    numrun=2
    # Is the file existing and not empty ? 
    if [-f $fichier/$MSV01.$numsoc.$numrun.xml] then 
       nbrmot= $(wc -l $fichier/MSV01.$numsoc.$numrun.xml)
     
     if [$nbrmot > 1] then 
       cp $fichier/MSV01.$numsoc.$numrun.xml $tmp
       if [$? != 0]  then 
         echo "copying problem of the file" 
       fi 
     fi 
    else 
       echo "$fichier/$MSV01.$numsoc.$numrun.xml not present" 
    fi
    Merci

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 22
    Par défaut
    A priori, je dirais ça:

    Please note the spacing inside the [ and ] brackets! Without the spaces, it won't work!

    http://www.linuxconfig.org/Bash_scri...-fi-statements

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if [ expr ]; then
    ...
    de plus, les évaluations arithmétiques s'effectuent dans...
    des évaluations arithmétiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (( expr )); then
    ...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Par défaut
    merci à vous

    mais qu'entendez-vous par évaluation arithmétique ?

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    des comparaisons de nombres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var=12
    var1=2
    if (( var > var1 ))
    then echo "\$var est supérieur à \$var1"
    elif (( var < var1 ))
    then echo "\$var est inférieur à \$var1"
    else
    # c'est à dire (( var == var1 ))
         echo "\$var est égal à \$var1"
    fi
    comme tu le vois, le signe dollar n'est pas nécessaire entre les double-parenthèses (( ))(sauf pour les éléments d'un tableau, qui doivent conserver leur forme: ${array[n]})

    PS: n'oublie de mettre des espaces entre les crochets droits [ ] et l'expression testée.
    ces espaces indispensables entre crochets droits ne le sont pas entre double parenthèses.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Par défaut
    Merci, ça marche maintenant mais j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ./TEST.sh[8]: 60:  not found
    NBRMOT:
    ./TEST.sh[10]:   > 1 : syntax error
    Problème pour considérer le nombre de wc (=60) dans le fichier visé ?


    sauf pour
    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
    #!/bin/ksh
    # script TEST.sh
     
    numsoc=1
    numrun=28781
    # Is the file existing and not empty ?
    if [ -f $fichier/"MSV01".$numsoc.$numrun.xml ];then
       nbrmot= $(wc -l $fichier/"MSV01".$numsoc.$numrun.xml)
       echo "NBRMOT: $nbrmot"
     if (( $nbrmot > 1 ));then
       cp $fichier/MSV01.$numsoc.$numrun.xml $tmp/PPI
       if (( $? != 0 ));then
         echo "copying problem of the file"
       fi
     fi
    else
       echo "$fichier/"MSV01".$numsoc.$numrun.xml not present"
    fi

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    il ne devrait pas y avoir d'espaces autour du = lors de l'assignation d'une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nb2lignes=_$(wc -l $fichier/"MSV01".$numsoc.$numrun.xml) #non
    
    nb2lignes=$(wc -l $fichier/"MSV01".$numsoc.$numrun.xml) #oui
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Tu peux encore simplifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (( $? != 0 )) ; then
    est équivalent à
    Une expression numérique non nulle est considérée comme vraie.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    voire même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cp $fichier/MSV01.$numsoc.$numrun.xml $tmp/PPI || echo "copying problem of the file"
    simplement
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Par défaut
    Merci à tous pour votre aide, cela m'a bien aidé à mettre tout cela un peu en ordre

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

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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