Rechercher : dans
Par :

[shell] Tableaux

Dernière réponse le 20 déc 2008 à 15:00:16 jebok, le 5 jui 2005 à 16:52:06 
 Signaler ce message aux modérateurs

Bonjour,

comment créer des tableaux en Shell UNIX ?
je veux par exemple créer un tableau contenant 3 valeurs (chaque élément du tableau est une chaine de caractères), puis pouvoir accéder à chaque élément du tableau.

Merci de votre aide.

Configuration: ksh

Meilleures réponses pour « [shell] Tableaux » dans :
Guide d'utilisation du Shell pour débutant VoirSHELL BASH - GUIDE D'UTILISATION - Niveau Débutant Introduction Appel aux membres CCM II. C'est quoi le shell ? III. Comment accéder à la ligne de commande IV. Les consoles virtuelles Exemple : Accéder à la console 3 depuis l'interface...
[Shell] Tester une variable numérique VoirTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...
Manipulations élémentaires des tableaux sous MatLab VoirSommaire I. Stockage des tableaux II. L'indexation linéaire II.1. Accéder à un élément d'un tableau en utilisant l'indexation linéaire II.2. Passer d'une indexation à l'autre II.2.1. La fonction ind2sub II.2.2. La fonction sub2ind III. La...
Tableaux HTML VoirUtilisation de tableaux Il est souvent utile de présenter des informations mieux structurées qu'avec des listes. Les tableaux permettent de les afficher en lignes et en colonnes. Les tableaux sont définis comme étant des suites de lignes. Un...
SQL - Modification de table VoirModification de table Il est possible de supprimer une table grâce à la clause DROP, il existe aussi des commandes moins extrêmes permettant L'ajout de colonnes La modification de colonnes La suppression de colonnes Enfin, il est possible...
Javascript - Les tableaux VoirIntroduction à la notion de tableau Les variables de Javascript ne permettent de stocker qu'une seule donnée à la fois. Or, étant donné qu'il est souvent utile de manipuler de nombreuses données, le concept de variable se révéle parfois...

1

boschtoo, le 5 jui 2005 à 18:47:41
  • +1

Bonjour jebok,
Je ne sais pas si c'est ce que tu cherches, mais voila un exemple dans lequel tu lis les 3 premières colonnes (avec cat) dans un fichier "test" afin de les afficher comme tableau (avec awk) et d'ajuster les colonnes (avec column).

$ cat test|awk '{print $1,$2,$3}'|column -t

pour y accèder par la suite, tu as l'embarras du choix. Tu continues avec des pipes ( | ) en ajoutant des commandes voulues, ou alors tu crées un fichier avec le résultat que tu utilises par la suite.

Répondre à boschtoo

2

jipicy, le 5 jui 2005 à 20:59:44
  • +5

Salut,

Essaie comme ça :

Création d'un tableau (mon_tableau) avec trois valeurs (Linux/Windows/MacOSX) :

$ set -A mon_tableau Linux Windows MacOSX
Affichage de la valeur "#2" :
$ echo ${mon_tableau[1]}
Windows
Affichage de toutes les valeurs :
$ echo ${mon_tableau[*]}
Linux Windows MacOSX
Ajout d'une 4ème valeur :
$ mon_tableau[3]=BeOS
$ echo ${mon_tableau[*]}
Linux Windows MacOSX BeOS
$
;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

3

savannah, le 19 mar 2007 à 17:46:59

Je passais par là à la recherche de la solution que tu as proposé.
Merci.

Répondre à savannah

4

jipicy, le 19 mar 2007 à 18:59:15
  • +1

De rien ;-))

Repasse quand tu veux ;-) Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

5

Eric, le 31 jui 2008 à 09:43:50

Je passais par là aussi, merci bien, simple et précis ;)

Répondre à Eric

6

Harry974, le 31 jui 2008 à 15:23:18

Est-ce possible de savoir le "numéro" qu'occupe une valeur dans le tableau ? Par exemple avoir comme réponse que Windows occupe 1...

Répondre à Harry974

7

jipicy, le 31 jui 2008 à 18:58:04

En bidouillant un peu, oui :

echo "${mon_tableau[*]}" | tr ' ' '\n' | awk '/Windows/ {print NR-1 }'
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

8

Flying Hermes, le 19 déc 2008 à 23:38:51
  • +1

Bonjour tous le monde,

Voila, après avoir parcouru de nombreux forums, je n'ai toujours pas trouvé la réponse à mon problème.

En Shell bash, je cherche à rentrer dans un tableau les valeurs d'une variables.
En pratique j'ai :

TOTO=VALEUR_TOTO
TATA=VALEUR_TATA

Et j'aimerais mettre dans la 1ère ligne de TITI la VALEUR_TOTO et dans la 2ème VALEUR_TATA.

Quelqu'un pourrait-il m'aider svp.
Merci d'avance.
F.H.

Répondre à Flying Hermes

9

jipicy, le 20 déc 2008 à 09:57:30

Salut,

Je ne sais pas si j'ai bien tout compris, mais...

[tmpfs]$ TOTO=VALEUR_TOTO

[tmpfs]$ TATA=VALEUR_TATA

[tmpfs]$ TITI=( $TOTO $TATA )

[tmpfs]$ echo "${TITI[0]}"
VALEUR_TOTO

[tmpfs]$ echo "${TITI[1]}"
VALEUR_TATA

[tmpfs]$
;-))
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

10

Flying HErmes, le 20 déc 2008 à 13:39:09

Bonjour,

Merci Jipicy pour ta réponse.

C'est effectivement ce que je voulais faire.
Mais je n'ai pas donné toutes les détails (oups !!!)

En fait les variables que je souhaite rentrer dans un tableau, disons TAB, sont les arguments d'une fonction.
Si j'appel la fonction FONCTION de la manière suivante :

FONCTION ${ARG1} ${ARG2} ${ARG3}

j'aimerais alors, au sein de la fonction FONCTION, mettre tout les argument ARGi (avec i=1,2,3) dans le tableau TAB.

Pour l'instant je fais comme ça (interdiction de rire) :

case $# in
"1") TAB=$1;;
"2") TAB=($1 $2);;
"3") TAB=($1 $2 $3);;
esac


C'est fonctionnel... mais comme vous vous en doutez, c'est un peu lourd et cela ne traite qu'un nombre d'arguments fin (1, 2 ou 3 dans l'exemple ci-dessus)i.

J'aimerais systématiser la procédure pour n arguments.
Avez-vous une idée de la marche à suivre?
Merci d'avance.

Flying Hermes

Répondre à Flying HErmes

11

Flying HErmes, le 20 déc 2008 à 13:59:58

Re-bonjour,

J'en profite pour poster une autre question relative aux tableaux en Shell bash.

L'objectif général du script que j'écrit est le suivant :
Je cherche à réaliser une commande qui me lit dans le répertoire courant le nom de tous les fichiers d'une certaine extension (disons .ext) et :
1) si aucun fichier *.ext : me renvoie un message d'erreur
2) si un seul fichier *.ext : lit le nom du fichier
3) si plusieurs fichiesr *.ext : me propose (via select) de choisir parmi tous les fichiers *.ext lequel choisir et lire son nom.

Si la variable EXT contient l'extension des fichiers à rechercher (ex: $EXT=.doc)
alors pour récupérer la liste des fichier portant cette extension je fais :

LIST_FILES=$(find *$EXT)

La variable LIST_FILES contient alors le nom de tous les fichiers portant l'extension .doc

Le problème est que LIST_FILES ne semble pas être un tableau.
En effet si je fais :

echo $LIST_FILES

j'obtiens bien :

fichier1.doc
fichier2.doc
fichier3.doc

Mais si je fais

echo ${#LIST_FILES[*]}

Alors j'obtiens : 1
Comment récupérer la dimension de la variable LIST_FILES. Celle-ci devrait être égale à 3 dans mon exemple précédent.

Une fois cette dimension récupérée (appelons-la NBR_FILES) il ne me restera plus qu'a choisit quoi faire suivant sa valeur :

case $NBRE_FILES
"0") -----> Message d'erreur
"1") -----> Lecture nom fichier
*) -----> Proposition du fichier à lire via SELECT
esac

Et le tour est joué.
Merci pour votre aide.

F.H.

Répondre à Flying HErmes

12

 jipicy, le 20 déc 2008 à 15:00:16
  • +5

LIST_FILES=( $(find *$EXT) )
;-))
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy