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 :

Solution script bash


Sujet :

Shell et commandes GNU

  1. #1
    Invité
    Invité(e)
    Par défaut Solution script bash
    Bonjour

    Je voudrais faire un script bash qui lorsqu'on l'execute , lit une suite de parametre puis les écrit dans une liste numéroté , par ex :

    Saisir les param :
    a
    b
    c
    d
    e

    PUis a la fin du prog , cela fait ceci :
    1 : a
    2 : b
    3 : c

    Donc je bloque un peu , j'ai essayé différent trucs , que ce soit des boucles du type , for i in $(seq 1 9) , ou même écrire tout les arguments avec $* ou $@ , je ne trouve pas la solution

    Merci d'avance de vos conseils

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

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

    c'est pas clair.

    • comment sont passés les arguments au script ?
      • en paramètres
      • depuis un fichier
      • c'est le script qui les demande
    • comment savoir que la lecture des paramètres est terminée ?
    ...

    il faut réfléchir un minimum ("dessiner" un arbre de décisions) avant de coder quoi que ce soit !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Disons que je veux faire un script qui affiche la liste numérotée des paramètres d'une commande tout simplement .

    Pour savoir que c'est terminé , on devra par exemple cliquer sur .

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 684
    Par défaut
    et alors ?

    Code pseudo-code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    tant que param n'est pas "."
    lire param
    si param n'est pas ".", alors Param=Param n+1 param, finsi
    fin tant que
     
    afficher Param
    tu veux faire ça en bash (tu peux utiliser un tableau pour Param) ? ou en sh ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'avais en effet pensé à utiliser un tableau , mais je vois toujours pas comment faire pour afficher les différents arguments dans l'ordre .

    Je veux faire ça en bash

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Une simple boucle "for" sur les paramètres ("$@") et un compteur qui s'incrémente et tu obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ ./foo.sh un deux trois papa maman "la bonne" "et moi"
    1 : un
    2 : deux
    3 : trois
    4 : papa
    5 : maman
    6 : la bonne
    7 : et moi
     
    $

  7. #7
    Invité
    Invité(e)
    Par défaut
    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
    #!/bin/bash
     
     
    echo "Saisir les parametres : "
     for i in $(seq 1 9)
      do
        read param
        param=$(($param+1))
    done
     
    for z in $(seq 1 9)
     do
       echo $z ") :  $param" #echo $@ ne marche pas aussi ^^
    done
     
    exit
    J'y suis presque ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 684
    Par défaut
    J'y suis presque ?
    à deux/trois parsecs près, oui.
    oui, je suis méchant
    Code bash : 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
    $ for ((x=0;x<9;x++)); do read v; a+=( "$v" ); done; for ((x=0;x<${#a[@]};x++));do echo "$((x+1))  : ${a[x]}"; done; unset x a
    a
    b
    c
    d
    e
    f
    g
    h
    i
    1  : a
    2  : b
    3  : c
    4  : d
    5  : e
    6  : f
    7  : g
    8  : h
    9  : i
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Oui ça marche .

    Je vais encore te déranger , j'aime vraiment pas copier un truc que je saisis pas .
    Pas moyen d'avoir quelques explications ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 684
    Par défaut
    a est un tableau.

    quoi d'autre ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Tu déclares pas le tableau ?

    Unset correspond à quoi ?

    a+=( "$v" ) correspond a quoi le + ?

    "$((x+1)) : ${a[x]}" , ça aussi ^^

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 684
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ help unset
    unset: unset [-f] [-v] [nom ...]
        Annule des valeurs ou des attributs de variables et de fonctions du shell.
    [...]
    un tableau indexé est une variable, à peu près comme une autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ v="a"
    $ echo "$v"
    a
    $ v+="b"
    $ echo "$v"
    ab
    les tableaux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ y=1
    $ echo $((y+1))
    2
    c'est une évaluation arithmétique, normale.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Merci de vos réponses . C'est bien clair .

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

Discussions similaires

  1. Requête POST dans un script bash
    Par desperado dans le forum Linux
    Réponses: 4
    Dernier message: 11/12/2007, 22h38
  2. Réponses: 21
    Dernier message: 29/09/2005, 19h33
  3. Script bash : Pb avec sed
    Par fred64 dans le forum Linux
    Réponses: 3
    Dernier message: 19/08/2005, 11h24
  4. Scripts bash : requêtes sql
    Par milka dans le forum Linux
    Réponses: 3
    Dernier message: 17/08/2005, 10h59
  5. Problème script Bash
    Par Sphost dans le forum Linux
    Réponses: 10
    Dernier message: 26/07/2005, 09h56

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