Extraire un caractère d'une chaine

Résolu
fabinou -  
 fabinou -
Bonjour,

Commençant pour mes études la programmation sous forme de script shell, je me retrouve face à quelques petits soucis.

Je passe en paramètre de mon script une chaîne de 81 caractères.
Dans cette chaine, je dois compter le nombre de '.' qu'elle contient.
Pour me faciliter la vie, j'ai essayé de la transférer dans un tableau.

J'ai vu que ${chaine:pos:n} pourrait m'aider, mais à chaque fois que je m'en sers, j'obtiens l'erreur "Bad substitution".

Voici mon script :

#!/bin/sh  

echo "Lancement du script "  
echo " "  
echo " "  

chaine=$1  

for i in 'seq 0 80'  
 do  
  tab[$i]=$(echo ${$chaine:1:1})  
  echo "tab[$i] " 
 done  

echo " "  
echo " "  
echo "fin du script "


Si quelqu'un pouvait m'aider à réussir à récupérer chaque caractère, et à correctement utiliser mon tableau, ce serait vraiment génial, les débuts sont un peu durs.

Merci d'avance !

A voir également:

4 réponses

Flachy Joe Messages postés 2102 Date d'inscription   Statut Membre Dernière intervention   260
 
Salut,
en général si tu utilises une boucle en shell tu peux te dire que tu as zappé quelque chose ! ;-)
Il y a 2 commandes qui sont parfaites pour ton cas :
tr qui converti ou supprime les caractères choisis dans une chaîne
wc qui compte le nombre de caractère (ou de mots ou de lignes)

utilise man tr et man wc pou avoir plus d'infos.

La ligne de code qui va bien :
n=$(echo $chaine | tr -cd '.' | wc -c)

0
fabinou
 
Cool génial merci ! J'avais pensé à wc, mais je ne connaissais pas du tout la commande "tr", effectivement c'est parfaitement ce qu'il me fallait. =)
Au vu du man, cette commande n'a pas l'air d'être simple à appréhender au début mais ça devrait aller.

Pour l'histoire de la boucle, c'est également noté.

Tu aurais une piste pour le passage de chaque caractère en tableau du coup, c'est à dire récupérer chaque caractère un à un ? Car en fait, je vais plus tard devoir représenter ces 81 caractères sous forme d'une matrice de 9*9, elle même composée de 9 matrices de 3*3.
0
Flachy Joe Messages postés 2102 Date d'inscription   Statut Membre Dernière intervention   260
 
Y a de la doc par là : https://abs.traduc.org/abs-5.0-fr/ch09s02.html

bonne continuation !
PS : ton premier script ne fonctionnait pas car i ne prenait qu'une seule valeur dans la boucle i='seq 0 80' Il aurait fallu écrire for i in $(seq 0 80)
0
fabinou
 
Génial, merci pour tout !
0