Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/08/2007, à 21:22

Sebome

[RESOLU] help script shell

Bonjour à tous
J'ai deux question...

1)Existe t'il une commande pour récupérer la longueur d'une chaîne de caractère?

2)Comment récupérer les 6 premier caractères d'une chaîne de caractère?
J'ai essayé ceci mais ça ne fonctionne pas...

TOTO="abcdefghijklm"
VAR1=;
for(( i=0 ; i<7 ; i++ ))      #pb ici : Syntax error: Bad for loop variable
do
   VAR1=$VAR1${$TOTO:$i:1}
done

Je vous remercie d'avance

Cordialement Sebome

Dernière modification par Sebome (Le 23/08/2007, à 20:44)

Hors ligne

#2 Le 22/08/2007, à 21:50

Sebome

Re : [RESOLU] help script shell

up!
Aucune idée?

Hors ligne

#3 Le 22/08/2007, à 22:02

alexduf

Re : [RESOLU] help script shell

Salut

pour récupérer la longueur d'une chaine de caractères, regarde la commande wc (word count)
il existe un certain nombre d'options dont le nombre de caractère (je le connais pas de tête, mais un man wc devrais te te fixer)


ensuite pour les boucles il me semble que cela ne fonctionne pas comme en C ou en java. Pour les for cela fonctionne de la manière suivante :

for VARIABLE in LISTE_DE_VALEUR
do

LISTE_DE_COMMANDES

done

je te dis ca de tête, donc à vérifier ;-)

[edit]le post de abetsic est bien plus efficace ^^suis donc ses conseils[/edit]

Dernière modification par alexduf (Le 22/08/2007, à 22:08)

Hors ligne

#4 Le 22/08/2007, à 22:04

abetsic

Re : [RESOLU] help script shell

tu peux faire un truc du genre
echo ${#ta_variable}
qui te renverra le nombre de caractères de ta_variable et
echo ${ta_variable:0:6}
qui  te renverra les 6 premiers caractères de ta_variable.

edit : en supposant que tu utilises bash comme interpreteur. Tu peux faire man bash pour plus d'infos.

Dernière modification par abetsic (Le 22/08/2007, à 22:05)

Hors ligne

#5 Le 22/08/2007, à 22:10

Sebome

Re : [RESOLU] help script shell

Merci beaucoup pour vos réponses, je vais regarder ca.
oui c'est du bash (je débute en bash)

Hors ligne

#6 Le 22/08/2007, à 22:28

Sebome

Re : [RESOLU] help script shell

j'ai toujours un problème que je ne comprend pas trop...
si je fais directement dans la console  :

$ NOM=abcdefghijkl
$ echo ${NOM:0:6}
abcdef

et dans mon script (test.sh)ça ne marche pas

#!/bin/sh
NOM=$1
echo ${NOM:0:6}

sh test.sh abcdefghijkl
test.sh: 3: Syntax error: Bad substitution

Pourriez vous éclairer ma lanterne?

Hors ligne

#7 Le 22/08/2007, à 22:36

abetsic

Re : [RESOLU] help script shell

Parce que /bin/sh est un lien symbolique vers /bin/dash qui est un interpréteur différent de bash. Remplace simplement /bin/sh par /bin/bash, ça devrait résoudre ton problème.

Hors ligne

#8 Le 22/08/2007, à 23:30

Sebome

Re : [RESOLU] help script shell

je suis arrivé au résultat voulu mais ça me mets une erreur...
Le but de mon script est de générer un login en fonction du nom et du prenom de la personne
voivi le script

#!/bin/bash
#genere un login du type
#si longueur nom < 6 : <nom>_<premiere_caractere_du_prenom>
#sinon : <6_premier_caractere_du_nom>_<premiere_caractere_du_prenom>

if [ $# != 2 ]; then
    echo -n "Entrer le nom : "
    read NOM
    echo -n "Entrer le prenom : "
    read PRENOM
    echo 
    echo
else
    NOM=$1
    PRENOM=$2
fi

SEP="_"

if [ ${#NOM} < 7 ]; then
    LOGIN=$NOM
else
    LOGIN=${NOM:0:6}
fi
LOGIN=$LOGIN$SEP${PRENOM:0:1}

echo "*************************"
echo "$NOM $PRENOM"
echo "*************************"
echo "Login : " $LOGIN

et voici le résultat

./generateLogin.sh saint-marc jean
./generateLogin.sh: line 20: 7: Aucun fichier ou répertoire de ce type
*************************
saint-marc jean
*************************
Login :  saint-_j

ca marche aussi si le nom fait moin de (ou égale à) 6 caractères
mais il resulte toujours une erreur

Quelqu'un peut m'expliquer?
Je vous remercie pour votre aide

Hors ligne

#9 Le 22/08/2007, à 23:36

abetsic

Re : [RESOLU] help script shell

Car ce n'est pas comme ça que l'on fait les tests d'inégalité. smile

de mémoire c'est  [ $ta_var -lt 5 ]
man test pour plus d'infos.

Hors ligne

#10 Le 23/08/2007, à 20:43

Sebome

Re : [RESOLU] help script shell

C'est bien ça je vous remercie tous pour votre aide:D

Hors ligne

#11 Le 25/08/2007, à 15:09

YMulleneers

Re : [RESOLU] help script shell

Bonjour,

J'ai une idée à proposer

for i in $(seq  7)
do
echo $i
done

un petit détour par le manuel s'impose : prennez une console et tapez "man  seq".  Je suis débutant, je ne peux pas vous en dire plus...

Cordialement


Linux Mint 16

J'aime à utiliser Linux.

Hors ligne

#12 Le 26/08/2007, à 05:30

kaworu

Re : [RESOLU] help script shell

YMulleneers a écrit :

Bonjour,

J'ai une idée à proposer

for i in $(seq  7)
do
echo $i
done

un petit détour par le manuel s'impose : prennez une console et tapez "man  seq".  Je suis débutant, je ne peux pas vous en dire plus...

Cordialement

Salut !
ton idée est bien, mais si tu utilise $() cela ne marche qu'avec bash. Si ce n'est pas un problème, les versions "récentes" de bash supportent directement ce type d'itération :

for i in {1..10}; do
#  Plus simple et direct que for i in $(seq 10)
  echo -n "$i "
done

voir ici : http://abs.traduc.org/abs-4.2.01-fr/ch34s02.html
et biensûr, les boucles for "à la C" (grâce à l'expansion arithmétique de bash) :

for ((i=0; i < 10; i++)); do
    echo $i
done

"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne