'Shifter' une variable
Résolu
Matthia$
Messages postés
371
Statut
Membre
-
Matthia$ Messages postés 371 Statut Membre -
Matthia$ Messages postés 371 Statut Membre -
Bonjour tout le monde,
Je fais mon premier script pour Unix.
J'ai compris la manipulation des variables $1...$9 ainsi que la fonction shift.
Est-il possible de les utiliser sur une variable quelconque ?
Je ne me trouve pas très clair, alors voici un exemple.
Et maintenant, comment je peux cibler le premier de mesElements et ensuite 'shifter' cette variable ?
Pour le moment, soit je refait un sous-programme pour réutiliser $1...$9, soit je fais des commandes avec
Et quel est le plus 'propre' pour l'Unix ?
Merci d'avance.
Matthia$
Je fais mon premier script pour Unix.
J'ai compris la manipulation des variables $1...$9 ainsi que la fonction shift.
Est-il possible de les utiliser sur une variable quelconque ?
Je ne me trouve pas très clair, alors voici un exemple.
mesElements=$*
Et maintenant, comment je peux cibler le premier de mesElements et ensuite 'shifter' cette variable ?
Pour le moment, soit je refait un sous-programme pour réutiliser $1...$9, soit je fais des commandes avec
expr. N'y a-t-il pas plus adapté ?
Et quel est le plus 'propre' pour l'Unix ?
Merci d'avance.
Matthia$
10 réponses
-
Bonjour,
Pourquoi ne pas utiliser une boucle ( en ksh) ? :
for i in $mesElements
do
echo $i
done
et ainsi on passe en revue tous les arguments ... Est-ce bien en ksh que vous voulez coder ? -
Salut,
Tu peux utiliser les tableaux ou même les paramètres au-delà de $9 (il suffit pour cela de mettre des accolades).
Un exemple avec l'affichage d'un élément du tableau et du même élément avec les paramètres :
[tmpfs]$ cat foo.sh #! /bin/sh #set -xv MesElements=( $* ) echo "Elément 1 = ${MesElements[0]}" echo "Elément 1 = ${1}" echo "Elément 11 = ${MesElements[10]}" echo "Elément 11 = ${11}" echo "Elément 15 = ${MesElements[14]}" echo "Elément 15 = ${15}" [tmpfs]$ ./foo.sh a b c d e f g h i j k l m n o p q r s t u v w x y z Elément 1 = a Elément 1 = a Elément 11 = k Elément 11 = k Elément 15 = o Elément 15 = o [tmpfs]$
;-))
-
Effectivement, c'est en ksh.
Ha, cette réponse me plait ! :)
Je n'avais pas pensé à utiliser for
Merci lecube
Par contre, si je veux travailler sur deux variables de même taille en même temps, je peux toujours utiliser une boucle for ?
Exemple
elts="elt1 elt2 elt3"
check="true false true"
On peut 'parcourir' les deux variables en même temps ? -
Coucou jipicy,
En fait, je n'ai pas le droit d'utiliser le tableau (consignes du prof qui ne trouve prof)
Merci quand même :)
[Désolé pour le doublon, PC qui rame] -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
"i in" ne considere pas la variable mais plus la chaine d'element. Donc si j'ai deux liste MesArguments1 et MesArguments2
for i in $MesArguments1 $MesArguments2
do
echo $i
done
donnera exactement le meme resultat ! -
Non, dans mon cas, je voulais avoir $MesArguments et $MesVérifications, qui ont exactement la même taille (car l'une dépend de l'autre)
Mais en fait, je n'utiliserais pas cette structure.
Si tu as la réponse, ça peut toujours être intéressant. ;)
En tous cas, merci bien. -
Je ne suis pas sur de bien cerner ton probleme ...
Si MesArguments="Arg1 Arg2" et MesVerif="Verif1 Verif2"
la commande que je t'ai donne donnera :
Arg1
Arg2
Verif1
Verif2
Peux-tu etre plus clair ? -
J'aimerais faire cohabiter Arg1 avec Verif1, et Arg2 avec Verif2.
Si jamais Verif1 n'est pas bon, il me faut utiliser Arg1 pour corriger l'erreur.
J'ai comme des couples ( Arg1, Verif1) -
Et si tu utilises une variable intermediaire ... ArgTmp
If ( Verfi1 )
then
ArgTmp=Arg1
elif ( Verif2)
then
ArgTmp=Arg2
fi
for i in $ArgTmp
do
echo $i
done
maintenant si tu as plus de n verif, je te conseille de passr au case :
case valverif in
verif1) ArgTmp=Arg1;;
verif2) ArgTmp=Arg2;;
verif3) ArgTmp=Arg3;;
...
esac
et la boucle.
-
Ouais, pas très simple pour les boucles infinies... ^^'
Finalement, je ne m'en servirais pas de cette second idée.
Mais en tout cas, merci pour le for, c'est finalement ce que je cherchais le plus.
Bonne journée !