'Shifter' une variable

Résolu
Matthia$ Messages postés 364 Date d'inscription   Statut Membre Dernière intervention   -  
Matthia$ Messages postés 364 Date d'inscription   Statut Membre Dernière intervention   -
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.
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

lecube Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   54
 
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 ?
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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]$

;-))
0
Matthia$ Messages postés 364 Date d'inscription   Statut Membre Dernière intervention   78
 
Malheureusement, je n'ai pas le droit d'utiliser les tableaux.
Ce n'est pas un raisonnement très 'Unix', donc le prof n'en veut pas ^^'
Merci quand même
0
Matthia$ Messages postés 364 Date d'inscription   Statut Membre Dernière intervention   78
 
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 ?
0
Matthia$ Messages postés 364 Date d'inscription   Statut Membre Dernière intervention   78
 
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]
0

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

Posez votre question
lecube Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   54
 
"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 !
0
Matthia$ Messages postés 364 Date d'inscription   Statut Membre Dernière intervention   78
 
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.
0
lecube Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   54
 
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 ?
0
Matthia$ Messages postés 364 Date d'inscription   Statut Membre Dernière intervention   78
 
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)
0
lecube Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   54
 
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.
0
Matthia$ Messages postés 364 Date d'inscription   Statut Membre Dernière intervention   78
 
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 !
0