Variables en bash
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Variables en bash



  1. #1
    flashstryker

    Variables en bash


    ------

    Bonjour futura science!

    Ca faisait longtemps que je ne t'avais pas invoqué!

    Alors, j'ai un problème en bash (je l'apprends pour un stage en bioinformatique) et c'est un problème dont je n'ai franchement aucune idée d'où il vient ou pourquoi il apparaît,
    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,

    Ton éternel obligé

    -----

  2. #2
    MissJenny

    Re : Variables en bash

    ce n'est pas qu'il ne trouve pas le fichier /home/scratch/etc c'est qu'il ne comprend pas la commande et l'interprète comme un nom de fichier commençant par path_run...

    tu ferais mieux d'utiliser un tableau. C'est le plus simple à mon avis. Sinon il y a la commande "declare"

  3. #3
    pm42

    Re : Variables en bash

    Citation Envoyé par MissJenny Voir le message
    ce n'est pas qu'il ne trouve pas le fichier /home/scratch/etc c'est qu'il ne comprend pas la commande et l'interprète comme un nom de fichier commençant par path_run...

    tu ferais mieux d'utiliser un tableau. C'est le plus simple à mon avis. Sinon il y a la commande "declare"
    Oui ou "set".

    Code:
    set path_run${j}_out="/home/scratch01/lgcalix/IGCM_OUT/OL2/TEST/test/RUN${j}"
    Mais effectivement un tableau est plus propre. On se demande aussi pourquoi i est recopié dans j : ça ne sert à rien.

  4. #4
    polo974

    Re : Variables en bash

    pas cool ton truc...
    déjà, est-il nécessaire d'avoir toutes les variables en même temps?

    première solution où on peut remplacer les nombres par autre chose (voir 'autre_chose' dans le for):

    Code:
    for i in 1 2 3 4 5 6 7 autre_chose
    do
      j="$i" # pourquoi ?
    
      # declaration "indicée" mais est-ce utile  (besoin de toutes les var en même temps???) ?
      declare path_run${j}_out="/home/scratch01/lgcalix/IGCM_OUT/OL2/TEST/test/RUN${j}"
      declare path_run${j}="/home/scratch01/lgcalix/TESTOFFLINE/modipsl/config/ORCHIDEE_OL/RUN${j}"
    
      # utilisation des var "indicées" en passant par des variables intermédiaires...
      prjo=path_run${j}_out; echo ${!prjo}
      prj=path_run${j}; echo ${!prj}
      echo
    done
    mais si on n'a que des indices entiers:
    Code:
    # declaration de arrays mais est-ce utile (besoin de toutes les var en même temps???) ?
    declare -a path_run_out
    declare -a path_run
    for j in $(seq 7)
    do
    
      # affectation des arrays
      path_run_out[j]="/home/scratch01/lgcalix/IGCM_OUT/OL2/TEST/test/RUN${j}"
      path_run[j]="/home/scratch01/lgcalix/TESTOFFLINE/modipsl/config/ORCHIDEE_OL/RUN${j}"
    
      # utilisation des arrays
      echo ${path_run_out[j]}
      echo ${path_run[j]}
      echo
    done
    Jusqu'ici tout va bien...

  5. A voir en vidéo sur Futura
  6. #5
    micapivi

    Re : Variables en bash

    Bonjour

    Ou alors, plus simplement avec bash :
    Code:
    path_run_out=( /home/scratch01/lgcalix/IGCM_OUT/OL2/TEST/test/RUN{1..7} )
    path_run=( /home/scratch0TESTOFFLINE/modipsl/config/ORCHIDEE_OL/RUN{1..7} )

  7. #6
    micapivi

    Re : Variables en bash

    Ou à partir d'un script bash
    en utilisant des variables :
    Code:
    #!/bin/bash
    
    min=1
    max=7
    
    prefixRun="/home/scratch01/lgcalix/TESTOFFLINE/modipsl/config/ORCHIDEE_OL/RUN"
    prefixRunOut="/home/scratch01/lgcalix/IGCM_OUT/OL2/TEST/test/RUN"
    
    declare -a 'path_run=('"$prefixRun"'{'"$min..$max"'})'
    declare -a 'path_run_out=('"$prefixRunOut"'{'"$min..$max"'})'

  8. #7
    micapivi

    Re : Variables en bash

    Mais si c'est pour créer les variables :
    Code:
    #!/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

Discussions similaires

  1. bash source relatif
    Par robotzeus1 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 29/06/2017, 10h29
  2. bash sed et makefile
    Par bbdoll dans le forum Programmation et langages, Algorithmique
    Réponses: 25
    Dernier message: 07/08/2012, 14h36
  3. Variables en bash
    Par Le Génie de la Lampe dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 12/04/2012, 09h33
  4. Csh et bash
    Par invite70eda27f dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 28/04/2009, 08h00
  5. Bash : remplacement de variables
    Par Bruno dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 09/07/2008, 21h15