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 :

Script qui détermine si un argument est numérique


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Par défaut Script qui détermine si un argument est numérique
    hey hey, c'est encore sk8trasher avec c'est petit programme en bourne shell
    Une des question de mon devoir, demande d'écrire un programme, qui détermine si un argument est numérique ou pas. L’énoncé demande d'utiliser la valeur de sortie de la fonction expr.

    Alors j'ai plusieurs versions, une que j'ai écrit par mes recherches, et l'autre l'aide envoyé par l'école, le script de l'école affiche des erreur quand on le lance. Où est l'erreur.
    Code Mon script : 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/sh  
    # script_expr.sh 
    case $# in
    	0)	echo "Fournissez moi un argument s'il vous plait:"
    		read arg;;
     
    	*)	arg=$1;;
    esac
    arg=$1 
    expr $arg + 0 1>/dev/null 2>&1 
    statut=$?  
    if test $statut -lt 2  
    then  
     echo "$arg" est un argument numérique
    else
     echo "$arg" n\'est pas un argument numérique
     
    fi

    Code Script d'aide: où est l'erreur : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #!/bin/sh
    case $# in
    	0)	echo "Fournissez moi un argument s'il vous plait:"
    		read arg;;
     
    	*)	arg=$1;;
    esac
    personne='expr $arg + 1 2>/dev/null'
    if test $? –eq 0
    	then echo $arg est numerique
    	else echo $arg n\'est pas numerique
    fi

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    les apostrophes ' ne permettent pas d'interpréter les commandes.
    au pire, il faut utiliser des accents graves ` (AltGr - 7), au mieux la substitution de commandes moderne $( ).
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par sk8trasher Voir le message
    Code Script d'aide: où est l'erreur : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #!/bin/sh
    case $# in
    	0)	echo "Fournissez moi un argument s'il vous plait:"
    		read arg;;
     
    	*)	arg=$1;;
    esac
    personne='expr $arg + 1 2>/dev/null'
    if test $? –eq 0
    	then echo $arg est numerique
    	else echo $arg n\'est pas numerique
    fi
    Salut
    Indépendamment de l'erreur de syntaxe mentionnée par N_Bah, ce script ne fonctionne pas si arg vaut -1. En effet, dans ce cas expr affiche 0 et quand expr affiche 0, il renvoie 1. Donc ce script affichera que -1 n'est pas numérique alors qu'il l'est.

    De plus, la variable "personne" n'étant pas utilisée, pourquoi la créer ???

    Donc si c'est vraiment ton école qui t'a fourni ce script je reste dubitatif quand à son niveau en shell. Ton script (qui ressemble étrangement à celui qui se trouve dans mon cours shell ) est quand-même bien meilleur...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Par défaut
    Merci pour ces réponses. Je suis rassuré vis à vis de ma programmation par contre je suis septique par rapport à l'école, ça craint...

    pour bien finir cet exo, j'aurai voulu commenter ces deux lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    expr $arg + 0 1>/dev/null 2>&1 
    statut=$?
    C'est dingue j'ai réussi à programmer quelque chose que je ne saurai expliquer aujourd'hui.
    $arg +0 1>/dev/null 2>$1 (je sais pas comment elle est sortie cette ligne là).
    $? ça veut dire quoi ?
    Merci de vos réponses

  5. #5
    Membre éprouvé Avatar de eric-m
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mars 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 62
    Par défaut
    C'est de la redirection de flux.
    Içi on redirige la sortie d'erreur standard (stderr : 2) vers la sortie standard nommée (stdout : 1), puis l'affichage de la sortie standard est redirigé vers /dev/null.

    $? contient le code de retour de la commande expr.

    En tout cas toutes mes félicitiations pour réussir à écrire un code sans le comprendre, c'est sans doute ce qu'on appelle de la programmation divinatoire

  6. #6
    Membre éprouvé Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Par défaut
    Citation Envoyé par eric-m Voir le message
    En tout cas toutes mes félicitiations pour réussir à écrire un code sans le comprendre, c'est sans doute ce qu'on appelle de la programmation divinatoire
    Ou du suicide informatique, tout dépend du contenu du programme

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Par défaut
    Citation Envoyé par Levi59 Voir le message
    Ou du suicide informatique, tout dépend du contenu du programme
    J'aime bien que l'on appelle ça de la programmation divinatoire. En vrai, il y a beaucoup de sources sur le net, et les exercices que je dois rendre ont déjà été évoqués sur d'autres forums. Du coup c'est pas si divinatoire que ça. Dommage.

    La programmation c'est complexe. Il y a beaucoup de notions, vocabulaires, structures à acquérir. Le terminal est intransigeant sur la syntaxe d'une commande (et heureusement d'un certain côté).

    Du coup je percute pas, où et comment le script détermine si l'argument est numérique ou pas.
    c'est ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    statut=$?  
    if test $statut -lt 2
    parce que le code retour de "expr $arg + 0" ça donne quoi ?

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

Discussions similaires

  1. [Script Bash] Tester si $1 est numérique
    Par COGAN dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 06/11/2018, 10h41
  2. [UNIX CMD] Command qui détermine si un processus est "sleeping"
    Par Rithy666 dans le forum Shell et commandes POSIX
    Réponses: 2
    Dernier message: 05/08/2010, 15h56
  3. Qui pourrait nous dire quel est le script utilisé ?
    Par ..::snake::.. dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 19/09/2007, 14h25
  4. fonction qui vérifie si une valeur est numérique?
    Par ryadh.naouar dans le forum C
    Réponses: 16
    Dernier message: 05/07/2007, 17h33
  5. [Script] Qui est administrateur ...
    Par ¤FRIX¤ dans le forum Sécurité
    Réponses: 6
    Dernier message: 06/04/2004, 11h58

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