[bash] question de tableau

bonjour à tous
je suis en train de faire un script en bash (qui a dit ‘ha bon?’) ou je tente d’initialiser un tableau:

#!/bin/bash
location=$1 # je vous passe le test sur le premier argument.
# Liste des fichiers à mettre à jour:
images="" # déclaration du tableau de liste des fichiers
boot=$location"boot.img"
$images[0]=$boot
system=$location"system.img"
$images[1]=$system
userdata=$location"userdata.img"
$images[2]=$userdata
recovery=$location"recovery.img"
$images[3]=$recovery
splash=$location"initlogo.rle" 
$images[4]=$splash
$
echo "${images[0]}\n\n"
echo "\n${images[*]} \n"
echo "\n${#images[*]} \n"

je n’arrive pas à initialiser le tableau avec la valeur des variables.
il me cherche toujours une commande, à priori:

./demo.sh: line 6: [0]=../Fichiers_mise_a_jour_2.000.16/boot.img: Aucun fichier ou dossier de ce type
....

je pense que c’est juste une erreur de syntaxe mais je ne trouve pas. Google n’a pas été mon ami la dessus. Toute recherche sur les tableaux parle d’allocation de type texte, pas de type ‘variable’ dans un tableau.
Si quelqu’un a une référence à me donner, je suis preneur.
Merci de votre aide.
Rémi.

Il faut juste enlever le $ en tête de tes affectations.
Pourquoi l’utiliser pour un tableau alors que pour les autres variables il ne faut pas le mettre ? :wink:

pourquoi je me casse la tête avec des c… alors que c’est d’une simplicité!!! :013

je te remercie beaucoup! j’ai testé pas mal de choses sauf celle la! c’est déjà la démence sénile?
:033

J’explique un peux mon idée peut etre (c’est vrai que j’aurais du quand meme)
Je voudrais parcouris le tableau après l’avoir remplis, pour une effectuer une commande :

debut boucle 
  <commande> parametres tableau[indice]
fin boucle jusq'à fin du tableau

en fait, il y aura aussi la meme chose pour les parametres, avec un tableau ‘arguments[]’

Amicalement.
Rémi

Si tu n’avais qu’un seul tableau à parcourir, ça serait probablement plus simple de faire quelque chose du genre :

[code]# sauvegarder les séparateurs
OLD_IFS="$IFS"

seul le saut de ligne est considéré comme un séparateur,

pour supporter les espaces dans une même valeur

IFS="\n"

LISTE=“valeur 1
valeur 2
valeur 3”

for VARIABLE in $LISTE
do
echo $VARIABLE
done
IFS="$OLD_IFS"[/code]

Mais c’est vrai qu’avec deux tableaux à parcourir en parallèle ça devient plus compliqué. À moins que j’aie mal compris et qu’il n’y ait pas de correspondance stricte entre les deux tableaux, auquel cas ça redevient faisable.

Tu pourrais fournir plus d’infos (même si c’est du pseudo-code non fonctionnel, c’est pour avoir une idée précise de ce que tu essayes de faire) ?

Voila donc un résumé de la situation.
J’ai reçu un Acer Liquid. Je veux faire la mise à jour, mais je ne peux pas le faire sous linux (quelque soit la distribution d’ailleur). Seul windows le permet avec les outils fourni par Acer. A cette fin, j’ai monté un virtualbox/xp puis regardé ce que faisait ces fameux outils : ils décompactent simplement le fichier de mise à jour, pour fournir après des fichiers binaires :
System.img, boot.img, ….
La suite est (relativement) simple : la commande fastboot permet d’envoyer avec un parametre adequat, le bon fichier au bon endroit ! Exemple :

# fastboot flash boot ./boot.img

J’ai donc réussi à récupéré le dossier de décompactage des binaires, et je l’ai rapatrié sous linux. A présent, je fais un script pour les envoyer dans l’ordre (et oui, il y a un certain ordre à respecter) vers le téléphone :slight_smile: Voila à peu près la tête du script :

1/ verif des arguments
2/ accord pour la non responsabilité (on ne sait jamais)
3/ test pour savoir si l’on est root (apparemment fastboot doit être root pour être efficace)
4/ creation des tableaux :
    tableau1 pour les valeurs (en dur dans le script ) des fichiers binaires du type ‘chemin/boot.img’ + vérification de la présence des fichiers en même temps
    tableau2 pour les parametres à passer à fastboot pour chaque fichier binaire (là, il y a un problème, car les parametres sont souvent en 2 ou 3 mots séparés )
5/ test de la présence de la commande de fastboot dans le répertoire courant
6/ dernière confirmation
7/ application des fichiers :
  boucle sur le nombre d’éléments de tableau1
	appliquer fastboot + {parametre contenue dans tableau2[]} + {nom du fichier binaire de tableau1[]}
  fin de boucle
8/ salutations.

Voila en gros ou je vais.

PS: non on peut pas faire la mise à jour du Liquid via l’xp en virtualbox.

Et tes arguments pour fastboot, ils viennent d’où ?
Ils sont fixés, fournis par l’utilisateur, ou bien extraits de ton archive ?

[quote=“syam”]Et tes arguments pour fastboot, ils viennent d’où ?
Ils sont fixés, fournis par l’utilisateur, ou bien extraits de ton archive ?[/quote]
les arguments pour fastboot sont codés ‘en dur’ dans le script.

Je n’ai pas eu le temps hier soir de mettre le script en ligne. Voila qui est fait. C’est une pré-pré-première ébauche. Il y a encore pas mal d’erreurs (y compris celle de mes tableaux). Je vous passe l’adresse, pour éviter de mettre tout le script ici même:
http://remi.suinot.org/IMG/mise_a_jour.sh

Bonjour,

Pour parcourir un tableau, 2 méthodes :

  1. Tu n’as pas besoin de connaitre l’indice
for var in "${tableau[@]}"
do
  echo ${var}
done

# ou alors
set "${tableau[@]}"
for var
do
  echo ${var}
done
  1. Tu as besoin de connaitre l’indice
for((indice=0;indice<${#tableau[@]};indice++))
do
  echo ${tableau[indice]}
done

J’ai pas tout saisi ton besoin mais de ce que j’en comprends, ce doit être quelque comme ceci :

<...alimentation de tableau et de paramètres...>
for((indice=0;indice<${#tableau[@]};indice++))
do
  <commande> ${parametre[indice]} ${tableau[indice]}
done

Note : je ne suis pas allé voire ton script

Bonjour;

[quote=“Totor”]Bonjour,

  1. Tu as besoin de connaitre l’indice
for((indice=0;indice<${#tableau[@]};indice++))
do
  echo ${tableau[indice]}
done

J’ai pas tout saisi ton besoin mais de ce que j’en comprends, ce doit être quelque comme ceci :

<...alimentation de tableau et de paramètres...>
for((indice=0;indice<${#tableau[@]};indice++))
do
  <commande> ${parametre[indice]} ${tableau[indice]}
done

[/quote]
Ayant deux tableaux, il me faut effectivement l’indice.

[quote]

Note : je ne suis pas allé voire ton script[/quote]
Je ne t’en veux pas, le code n’est pas très propre… :119

Rémi.

je viens de comprendre quelque chose, et pourquoi, malgré mes tests et en suivants tes recommandations, ça marchait pas! Mieux! mon script marchait pas, mais un petit script de test fonctionnait, lui!
En fait, c’est tout bète:

#!/bin/bash$

au début des scripts, mais /bin/sh chez moi renvois vers dash
et je viens de m’apercevoir que ma démo, je l’appel comme ceci:

./demo.sh argument1

et mon script comme ceci:

sh ./mise_a_jour.sh argument1 argument2

Comme quoi, c’est bien de récupérer les commandes précédentes en consoles, sauf si celle ci sont pourries!!! :030
Merci pour ton aide sur les tableaux. La syntax n’est pas toujours très ‘abordable’ au début.

Rémi. :006