Extraire un caractère d'une chaine

Résolu/Fermé
fabinou - Modifié par fabinou le 15/04/2013 à 19:16
 fabinou - 15 avril 2013 à 20:58
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 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 259
15 avril 2013 à 19:32
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
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 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 259
15 avril 2013 à 20:24
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
Génial, merci pour tout !
0