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 :

Comparer des arguments


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut Comparer des arguments
    bonjour à tous

    je suis débutant en script shell
    je dois écrire mon 1er script
    j'ai un exercice dont voici la base:
    Ecrire un programme en Bourne Shell qui accepte indifféremment 0,1 ou 2 arguments numériques et les classer en ordre croissant, comme dans l'exemple suivant :
    $ classe 26 13
    13 est inférieur a 26
    $ classe 11
    Il manque un argument, entrer votre nombre : 89 (89 entré par l'utilisateur)
    11 est inferieur a 89
    $ classe
    Il manque deux arguments.
    Entrer le premier argument : 987 (987 entré par l'utilisateur)
    Entrer le second argument : 23 (23 entré par l'utilisateur)
    23 est inférieur a 987


    donc je commence par comparer les 2 arguments


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/bin/sh
    #set -xv
      if [$1 -lt $2]; then 
    	echo "$1 est plus petit que $2"
    		else
    			echo "$2 est plus petit que $1"
    	fi
    et j’obtiens :
    $ ./test2.sh 12 88
    ./test2.sh: line 3: [12 : commande introuvable
    88 est plus petit que 12

    donc pourquoi ma comparaison ne fonctionne pas

    merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    les mots d'une phrase doivent être séparés par au moins un espace pour être lus correctement.
    c'est pareil en shell !
    et si les arguments sont égaux ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    les mots d'une phrase doivent être séparés par au moins un espace pour être lus correctement.
    c'est pareil en shell !
    et si les arguments sont égaux ?
    ha oui pas bete je doit rajouté cette argument
    merci

  4. #4
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    donc j'en suis a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/sh
    #set -xv
    	if [ $# -z ]
      then echo "il manque deux arguments"
    		elif [ $1 -eq $2 ]
    		then echo "$1 est égal à $2"
    			elif [ $2 -z ]
    			then echo "il manque un argument"
    				elif [ $1 -lt $2 ]
    				then echo "$1 est plus petit que $2"
    					else
    					echo "$2 est plus petit que $1"
    	fi
    et les résultats obtenus sont :


    bosk@bosk-PC ~
    $ ./test2.sh 88 88
    ./test2.sh: line 3: [: 2 : opérateur unaire attendu
    88 est égal à 88

    bosk@bosk-PC ~
    $ ./test2.sh 88 12
    ./test2.sh: line 3: [: 2 : opérateur unaire attendu
    ./test2.sh: line 7: [: 12 : opérateur unaire attendu
    12 est plus petit que 88

    bosk@bosk-PC ~
    $ ./test2.sh 88
    ./test2.sh: line 3: [: 1 : opérateur unaire attendu
    ./test2.sh: line 5: [: 88 : opérateur unaire attendu
    il manque un argument

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,
    Dans ton premier test, c'est:
    [ -z ... ] et non pas [ ... -z ]

    Un petit détail aussi, on essaie de ne pas mélanger les type de vérifications:
    on vérifie si le nombre d'arguments est respecté à part, puis ensuite on les exploite (mais bon, ça c'est pour la forme).

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    et on soigne son indentation !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    [ ] est un raccourci pour la commande test. tu comprends donc qu'il faut des espaces autour.
    ou
    le point virgule qui suit ne sert qu'à palier l'absence de retour à la ligne.

  8. #8
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    ok merci
    je comprend mes premières erreur

    je vais donc continuer a travailler dessus
    je vais certainement revenir avant la fin de la soirée pour poster la suite
    et vous redemander de l'aide
    merci beaucoup

  9. #9
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    donc maintenant je cherche la condition si je n'ai qu'un argument ou pas d'argument

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #!/bin/sh
    #set -xv
    	if [ $# -z ]
      then echo "il manque deux arguments"
    	elif [ $2 -z ]
      then echo "il manque un argument"
    		elif [ $1 -lt $2 ]
      then echo "$1 est plus petit que $2"
    		else
    			echo "$2 est plus petit que $1"
    	fi
    et la j'obtien pour aucun argument saisie
    $ ./test2.sh
    ./test2.sh: line 3: [: 0 : opérateur unaire attendu
    il manque un argument

    et pour un argument
    $ ./test2.sh 88
    ./test2.sh: line 3: [: 1 : opérateur unaire attendu
    il manque un argument

    qu'ai je donc raté ?
    merci

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

Discussions similaires

  1. [Date] Comparer des dates au format mySQL "date
    Par Marc_P dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 25/10/2004, 15h15
  2. comparer des sons
    Par heidi79 dans le forum DirectX
    Réponses: 2
    Dernier message: 12/08/2003, 01h18
  3. Réponses: 9
    Dernier message: 29/07/2003, 14h41
  4. [LG][FAQ]comparer des fichiers
    Par lucke dans le forum Langage
    Réponses: 11
    Dernier message: 01/06/2003, 18h02
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

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