Script shell et parametre

Résolu/Fermé
Kawa - 3 nov. 2008 à 10:38
 Kawa - 3 nov. 2008 à 12:30
Bonjour,
j'ai decouvert les joies du script shell pendant mon stage en entreprise et je souhaite acquerir plus de competance dans ce domaine. Je me suis amuse a faire quelques petits script plus ou moins bete mais j'aurais une question

J'ai decouvert comment creer des fonctions et comment leur passer des parametres.
J'aurais aimer savoir comment faire avec un while ceci:
#!/bin/sh

I=0
for I in "$@"
do
    echo $I
done


En gros je cherche a parcourir ma liste d'arguments, qui est variable, pour pouvoir par la suite effectuer des actions dessus.
Ce que je cherche a comprendre aussi c'est comment pouvoir incrementer une valeur et recuperer la valeur du $MA_VALEUR

Merci d'avance
A voir également:

5 réponses

ahmed.ben.salem Messages postés 86 Date d'inscription lundi 31 mars 2008 Statut Membre Dernière intervention 28 avril 2009 4
3 nov. 2008 à 11:48
Bonjour,
Bon pour le nombre des arguments est bien dans $#, alors voila ce que ta demander :
#!/bin/sh
i=0;
while [ "$i" -lt "$#" ];do
        echo "salut\n"
        i=$(expr $i + 1)
done

explication : while [ "$i" -lt "$#" ];do : tantque i < nbr d'argument.
echo "salut\n" : afficher "salut" et retour à la ligne.
i=$(expr $i + 1) : Incrémenté i.
ce script va afficher, suivant le nbr d'arguments, le msg : "salut".

;)
0
merci enormement pour ton explication, j'avais tenter quelquechose s'en approchant mais apparament pas la bonne syntaxe

saurais-tu aussi comment, au lieu d'afficher salut, afficher l'argument correspondant a la valeur de i?
merci :)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > Kawa
3 nov. 2008 à 12:02
Salut,

saurais-tu aussi comment, au lieu d'afficher salut, afficher l'argument correspondant a la valeur de i?
En gras ce qui a changé dans le script de départ :
#!/bin/sh
i=1;
while [ "$i" -le "$#" ];do
        echo "salut\n"
        eval echo "\$$i"
        i=$(expr $i + 1)
done
;-))
0
Kawa > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
3 nov. 2008 à 12:26
merci pour ton aide et merci a ahmed :)
0
ahmed.ben.salem Messages postés 86 Date d'inscription lundi 31 mars 2008 Statut Membre Dernière intervention 28 avril 2009 4
3 nov. 2008 à 11:58
Re,
#!/bin/sh
i=0;
while [ "$i" -lt "$#" ];do
        echo $i
        echo " "
        i=$(expr $i + 1)
done


Explication:
Sera mieux avec un exemple ;)
hostname#./test.sh hello world
Ici le nbr des arguments est 2.
Rq: $i contient les arguments.
alors : $0 contient "hello"
$1 contient "world"
alors l'affichage sera : hello world ( avec l'espace " ") ;)

:)
0
j'avais deja essayer de printer comme ca, mais j'obtiens les valeurs de i et non les arguments, c'etait pour ca que j'ai poser ma question
0
ahmed.ben.salem Messages postés 86 Date d'inscription lundi 31 mars 2008 Statut Membre Dernière intervention 28 avril 2009 4
3 nov. 2008 à 12:04
re,
je check et je te tien au courant ;)
:)
0
ahmed.ben.salem Messages postés 86 Date d'inscription lundi 31 mars 2008 Statut Membre Dernière intervention 28 avril 2009 4
3 nov. 2008 à 12:26
Re,
voila reponse :
#!/bin/sh
i=0;
for i in "$*"
do
    echo $i
done


$* : il liste tous les arguments et là, tant que $i prend chaque eteration une valeur de la liste, et sans le premier argument, $0 = ./test.sh

Cdt,
:)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 nov. 2008 à 12:27
Ben c'est son script de départ ça, non ? ;-))

La réponse au post #4 ;-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
merci a tout les deux :)
0