Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2425 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [BASH] Utiliser le contenu d'une variable pour créer une variable?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[BASH] Utiliser le contenu d'une variable pour créer une variable?

n°1137881
mdvore
Glandeur né
Posté le 26-05-2009 à 11:45:46  profilanswer
 

Voila le bout de mon script, avec en commentaires mon objectif.
 

Citation :

#!/bin/bash
########################################
# Test original actuellement en prod ###
########################################
MOUNT=`which mount 2>/dev/null`
NAIL=`which nail 2>/dev/null`
UMOUNT=`which umount 2>/dev/null`
RSYNC=`which rsync 2>/dev/null`
if [ -z ${MOUNT} ]; then unavailable "mount" EXIT; fi
if [ -z ${NAIL} ]; then unavailable "nail" EXIT; fi
if [ -z ${UMOUNT} ]; then unavailable "umount" EXIT; fi
if [ -z ${RSYNC} ]; then unavailable "rsync" EXIT; fi
 
 
################################################
# Avec la boucle for, ce que j'ESSAI de faire ##
################################################
LIST="mount umount rsync nail"
for VAR in ${LIST} do
VAR=`echo "${VAR}"|tr '[:lower:]' '[:upper:]'`                                         #Toutes les variables en majuscules
${VAR}=`which ${VAR} 2>/dev/null`                                                    #Vérifie la présence du soft
# Objectif ${VAR} doit être en faite MOUNT pour le premier tour de boucle, voir ci dessous
# MOUNT=`which ${VAR} 2>/dev/null`
 if [ -z ${MOUNT} ]; then mafonction "${VAR}" EXIT; fi
 export MOUNT                                                                                # Export OBLIGATOIRE, c'est bien la le soucis.
# Evidement à la place de ${MOUNT} on doit avoir consécutivement ${UMOUNT} ${RSYNC} et enfin ${NAIL}
done


 
 
Merci d'avance!
 
Pour info, ni {!VAR} ni $${VAR} ne font ce que je veux.
 
Edit: Et je sais qu'il existe une méthode propre et rapide pour le faire, mais impossible de retrouver.


Message édité par mdvore le 26-05-2009 à 12:21:56
mood
Publicité
Posté le 26-05-2009 à 11:45:46  profilanswer
 

n°1137884
wedgeant
Da penguin inside
Posté le 26-05-2009 à 11:57:24  profilanswer
 

Et en faisant un truc du genre VAR_${VAR} [:opus dei] [:mrbrelle]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°1137885
mdvore
Glandeur né
Posté le 26-05-2009 à 12:04:03  profilanswer
 

Pourquoi pas, je pense que cela peut marcher, mais c'est pas exactement le bon résultat :o

n°1137887
mdvore
Glandeur né
Posté le 26-05-2009 à 12:08:14  profilanswer
 

Et sa marche pas :o
 

Citation :


#!/bin/bash
LIST="mOUnt UMount RSYNc nail"
for VAR in ${LIST}
do
  echo ${VAR}
  VAR=`echo "${VAR}"|tr '[:lower:]' '[:upper:]'`
  VAR_${VAR}=salut
  echo ${VAR}
  echo ${VAR_$VAR}
done


 
adrien@adrien-laptop:~$ ./toto
mOUnt
./toto: line 7: VAR_MOUNT=salut : commande introuvable
MOUNT
./toto: line 9: ${VAR_$VAR} : mauvaise substitution

n°1137888
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 26-05-2009 à 12:25:01  profilanswer
 

mdvore a écrit :

Et sa marche pas :o


 
tu ne sais pas écrire un script, c'est différent.
 
Je ne saurais que trop te conseiller de lire le man de bash à ce sujet


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1137890
limax
Posté le 26-05-2009 à 12:36:29  profilanswer
 
n°1137892
wedgeant
Da penguin inside
Posté le 26-05-2009 à 12:52:15  profilanswer
 

mdvore a écrit :

Et sa marche pas :o

 

euh non mais là ... :sweat:

Code :
  1. #!/bin/bash
  2. LIST="mOUnt UMount RSYNc nail"
  3. for VAR in ${LIST}
  4. do
  5.  UVAR=$(echo "${VAR}" | tr '[:lower:]' '[:upper:]')
  6.  LVAR=$(echo "${VAR}" | tr '[:upper:]' '[:lower:]')
  7.  VAR_${UVAR}=$(which ${LVAR})
  8.  echo "${LVAR} -> ${VAR_${UVAR}}"
  9. done
 

p'tet qu'en scriptant correctement ça irait mieux déjà quoi :o


Message édité par wedgeant le 26-05-2009 à 12:56:30

---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
n°1137893
mdvore
Glandeur né
Posté le 26-05-2009 à 12:52:40  profilanswer
 

black_lord a écrit :


 
tu ne sais pas écrire un script, c'est différent.
 
Je ne saurais que trop te conseiller de lire le man de bash à ce sujet


 
Et oui, on est pas expert en 2min... Je débute effectivement.

n°1137909
mdvore
Glandeur né
Posté le 26-05-2009 à 13:55:10  profilanswer
 

Merci mais j'ai trouvé mieux en faite :)
 

Code :
  1. LIST="mount"
  2. for VAR in ${LIST}; do
  3.   MAJ=`echo "${VAR}"|tr '[:lower:]' '[:upper:]'` #Commande en MAJ
  4.   MIN=`echo "${VAR}"|tr '[:upper:]' '[:lower:]'` #Commande en min
  5.   WHICH=`which ${MIN} 2>/dev/null`
  6. if [ -z ${MAJ} ]; then unavailable "${MIN}" EXIT; fi
  7. eval "export ${MAJ}=${WICH}"
  8. done
  9. echo $MOUNT


 
Me retourne bien que $MOUNT --> /bin/mount
 
Merci ;)

n°1137912
wedgeant
Da penguin inside
Posté le 26-05-2009 à 14:04:52  profilanswer
 

[:mlc]
 
j'sais pas moi ... mais ça ressemble quand même énormément à ce que je t'ai proposé, mais en moins bien ... après tu fais comme tu veux hein [:elessar53]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
mood
Publicité
Posté le 26-05-2009 à 14:04:52  profilanswer
 

n°1137951
mdvore
Glandeur né
Posté le 26-05-2009 à 15:03:34  profilanswer
 

Oui effectivement Wedge, j'ai posté sans avoir lu avec attention ton script car j'avai déja trouvé la soluce a ma question :jap:
 
Je vais observer pour améliorer ducoup :)

n°1138579
sputnick
bip...bip...bip...bip...bi...b
Posté le 28-05-2009 à 02:25:45  profilanswer
 

Bon, on sort du bash mais voila une solution courte et concise de le faire en perl :
 

Code :
  1. perl -e '($_)=lc and print $_ ." -> " .`which $_` for @ARGV;' DF Cp lS


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [BASH] Utiliser le contenu d'une variable pour créer une variable?

 

Sujets relatifs
Boucle en bash[Topic Unik] Les SSD sous Linux : recensement, optimisation, conseils
[fedora10] impossible utiliser gsynaptic sur ibookcomment utiliser deux écrans en mode étendu sous Ubuntu ?
[bash] Remplacer un path dans un fichier par autre chose[Make + Bash] @%$# de parentheses :)
[Bash] mise a jour d'une variable (string) [FOU]dossier variable dans un chemin en batch
Petit script bash [resolu] 
Plus de sujets relatifs à : [BASH] Utiliser le contenu d'une variable pour créer une variable?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)