Pages : 1
#1 Le 28/03/2022, à 09:49
- 3sylvano31415
variable en bash
Bonjour, premier message sur ce forum!
Alors, je suis débutant en bash et j'ai un problème dont je n'arrive pas à comprendre l'origine malgré la lecture de plein de pages sur les variables bash etc.
or il me bloque depuis un moment déjà. Voici mon script (executable):
for i in 1 2 3 4 5 6 7 ; do
j="$i"
path_run${j}_out="/home/scratch01/lgcalix/IGCM_OUT/OL2/TEST/test/RUN${j}"
path_run${j}="/home/scratch01/lgcalix/TESTOFFLINE/modipsl/config/ORCHIDEE_OL/RUN${j}"
done
Je lui demande juste de générer des strings (pour avoir des raccourcis de path) et il me sort toujours 'n'est pas un nom de fichier ou de dossier' - et ça je le sais pcq lesdits dossiers
ne sont pas encore créés - Mais je ne lui demande rien vis à vis de la string, donc je ne comprends pas qu'il réponde cela - je ne lui envoie pas un cd path_run
et quand dans le terminal je demande d' echo les path_run leur valeur est vide.
Merci d'avance
Hors ligne
#2 Le 28/03/2022, à 11:01
- Watael
Re : variable en bash
Bonjour,
Comme demandé dans le premier message du tutoriel Retour utilisable de commande
Pour ajouter toi-même les balises code à ton précédent message #1 :
Cliquer sur le lien « Modifier » en bas à droite du message
Sélectionner le texte
Cliquer sur le <> de l'éditeur de message
https://pix.cyber-nux.fr/upload/img/1642675956.jpg
Voir règles du forum > balises BB code
Balise CODE :
C'est la balise à utiliser pour donner de longs messages d'erreurs, des contenus de fichiers de configuration, des commandes à taper, etc … Elle permet des messages plus "compacts", et est moins ambiguë que d'autres polices sur certains caractères.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 28/03/2022, à 11:05
- Watael
Re : variable en bash
salut,
numéroter des variables de cette manière est une fausse bonne idée.
utilise plutôt un tableau :
path_run_out=( /home/scratch01/lgcalix/IGCM_OUT/OL2/TEST/test/RUN{1..7} )
path_run=( /home/scratch01/lgcalix/TESTOFFLINE/modipsl/config/ORCHIDEE_OL/RUN{1..7} )
tu retrouveras test/RUN1 avec "${path_run_out[1]}"
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 28/03/2022, à 13:39
- erresse
Re : variable en bash
Salut Watael,
Indépendamment du choix de travailler avec des tableaux qui est probablement plus indiqué dans son cas, pourrais-tu expliquer le pourquoi de ce fonctionnement de bash ?
Par curiosité, j'ai essayé aussi les instructions de notre ami et je ne comprends pas pourquoi on obtient cette réaction :
bash: path_run1_out=/home/scratch01/lgcalix/IGCM_OUT/OL2/TEST/test/RUN1: Aucun fichier ou dossier de ce type
bash: path_run1=/home/scratch01/lgcalix/TESTOFFLINE/modipsl/config/ORCHIDEE_OL/RUN1: Aucun fichier ou dossier de ce type
alors qu'on ne cherche qu'à créer le contenu d'une variable et non à exploiter l'URL... Pourquoi est-elle testée et sanctionnée ?
NB: si on tente d'exécuter le même instruction en utilisant la valeur 1 à la place de la variable $j, aucune erreur n'est remontée...
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#5 Le 28/03/2022, à 14:36
- MicP
Re : variable en bash
Bonjour
Je tombe sur ce fil alors que je viens de poster sur un autre forum une solution
pour créer les variables :
#!/bin/bash
min=1
max=7
prefixRunOut="/home/scratch01/lgcalix/IGCM_OUT/OL2/TEST/test/RUN"
prefixRun="/home/scratch01/lgcalix/TESTOFFLINE/modipsl/config/ORCHIDEE_OL/RUN"
for ((i=min; i<=max; i++)); do
declare 'path_run'"${i}"'_out='"$prefixRunOut${i}"
declare 'path_run'"${i}"'='"$prefixRun${i}"
done
Hors ligne
#6 Le 28/03/2022, à 14:37
- Watael
Re : variable en bash
j'imagine que le Remplacement de paramètres inhibe l'assignation...
bash chercherait donc un fichier nommé « nomVar${n}=/chemin/fichier », alors qu'il n'existe pas de dossier nomVar${n}=/, et pas de sous-dossiers sous lesquels trouver fichier.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 28/03/2022, à 14:40
- Watael
Re : variable en bash
Bonjour
Je tombe sur ce fil alors que je viens de poster sur un autre forum une solution
pour créer les variables :#!/bin/bash min=1 max=7 prefixRunOut="/home/scratch01/lgcalix/IGCM_OUT/OL2/TEST/test/RUN" prefixRun="/home/scratch01/lgcalix/TESTOFFLINE/modipsl/config/ORCHIDEE_OL/RUN" for ((i=min; i<=max; i++)); do declare 'path_run'"${i}"'_out='"$prefixRunOut${i}" declare 'path_run'"${i}"'='"$prefixRun${i}" done
et pour automatiser l'utilisation de ces variables numérotées (faire la boucle inverse) ?
tu vois où je veux en venir ?
|
V
Dernière modification par Watael (Le 28/03/2022, à 19:46)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 28/03/2022, à 19:46
- Tawal
Re : variable en bash
Hello,
La solution de MicP me paraît alléchante et correcte (sans parler du fonctionnel)
Mais, comme le souligne Watael, il faut une autre boucle pour l'accès à ces variables.
Du coup, la solution de Watael qui passe par un tableau est plus appropriée, amha.
Une manipulation de tableau et quand même plus simple qu'une manipulation de nom de variable, il me semble.
Dernière modification par Tawal (Le 28/03/2022, à 19:47)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#9 Le 28/03/2022, à 19:59
- Watael
Re : variable en bash
il ne faut pas absolument une boucle : chaque variable pourrait être utilisée avec des commandes différentes.
mais si c'est une même commande pour toutes, il y aura obligatoirement boucle.
Et là...
Dernière modification par Watael (Le 28/03/2022, à 20:00)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#10 Le 28/03/2022, à 22:07
- MicP
Re : variable en bash
Oui, j'aime beaucoup plus l'utilisation de tableaux, plutôt que de créer des variables comme ça,
et j'avais d'ailleurs proposé les mêmes lignes de commandes que celles de Watael sur l'autre forum.
=======
Il faudrait que 3sylvano31415 nous dise comment vont être utilisées les variables créées,
car ça permettra peut-être de proposer une solution plus adaptée au problème à résoudre.
Dernière modification par MicP (Le 28/03/2022, à 22:12)
Hors ligne
#11 Le 29/03/2022, à 11:38
- erresse
Re : variable en bash
Je lui demande juste de générer des strings (pour avoir des raccourcis de path)
Dans son message#1, il nous disait ceci. Donc, ces raccourcis pourraient être utilisés indépendamment les uns des autres, ou traités en série dans une boucle...
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#12 Le 29/03/2022, à 11:44
- Watael
Re : variable en bash
3sylvano31415 a écrit :Je lui demande juste de générer des strings (pour avoir des raccourcis de path)
Dans son message#1, il nous disait ceci. Donc, ces raccourcis pourraient être utilisés indépendamment les uns des autres, ou traités en série dans une boucle...
c'est ce que j'ai dit, de manière peut-être un peu confuse.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
Pages : 1