Problème de if avec shell
Fermé
nbonnet
Messages postés
478
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013
-
25 sept. 2009 à 11:50
nbonnet Messages postés 478 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 4 septembre 2013 - 25 sept. 2009 à 16:09
nbonnet Messages postés 478 Date d'inscription jeudi 11 octobre 2007 Statut Membre Dernière intervention 4 septembre 2013 - 25 sept. 2009 à 16:09
A voir également:
- Problème de if avec shell
- Classic shell windows 10 français - Télécharger - Personnalisation
- Shell do while ✓ - Forum Shell
- Efi shell - Forum Windows 10
- Efi shell version 2.31 - Forum Programmation
- Secure shell - Télécharger - Divers Web & Internet
7 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
25 sept. 2009 à 11:55
25 sept. 2009 à 11:55
Salut,
Manque le "then" attitude ;-))
Manque le "then" attitude ;-))
if [ "${string:$k:1}" = " " ] then echo ${string:$k+1}; fi
jjsteing
Messages postés
1669
Date d'inscription
vendredi 11 mai 2007
Statut
Contributeur
Dernière intervention
21 mai 2012
181
25 sept. 2009 à 11:55
25 sept. 2009 à 11:55
bonjour :)
le fi, c'est quoi comme langage de prog ??
le fi, c'est quoi comme langage de prog ??
nbonnet
Messages postés
478
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013
46
25 sept. 2009 à 14:15
25 sept. 2009 à 14:15
Slt comme je le dit dans le titre je travail avec sur du shell
nbonnet
Messages postés
478
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013
46
25 sept. 2009 à 14:14
25 sept. 2009 à 14:14
Oki merci effectivement ca marche mieux.
Mais maintenant j'aimerais faire un return plutot qu'un echo dans if pour sortir de ma boucle car sinon il me supprime toutes les valeurs et c'est pas ce que je veux.
Mon but est de faire appel à la fonction plusieurs fois pour garder les deux dernières valeurs de ma chaine.
mais quand je fait appel a ma fonction avec cette ligne :
inter1=tokenize1 "`echo $down`"
la réponse est :
./test_traffic-bis.sh: line 34: traffic_in traffic_out 1253743500: 2.2048553575e+05 8.7238730288e+03: command not found
pour moi je ne demande pas de faire ceci en tant que commande et je n'arrive pas à déterminer pourquoi il veut exécuter ceci.
Mais maintenant j'aimerais faire un return plutot qu'un echo dans if pour sortir de ma boucle car sinon il me supprime toutes les valeurs et c'est pas ce que je veux.
Mon but est de faire appel à la fonction plusieurs fois pour garder les deux dernières valeurs de ma chaine.
mais quand je fait appel a ma fonction avec cette ligne :
inter1=tokenize1 "`echo $down`"
la réponse est :
./test_traffic-bis.sh: line 34: traffic_in traffic_out 1253743500: 2.2048553575e+05 8.7238730288e+03: command not found
pour moi je ne demande pas de faire ceci en tant que commande et je n'arrive pas à déterminer pourquoi il veut exécuter ceci.
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
25 sept. 2009 à 14:22
25 sept. 2009 à 14:22
inter1="tokenize1 \"`echo $down`\" "
?
?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
25 sept. 2009 à 14:28
25 sept. 2009 à 14:28
et :
Tout simplement, non ?
inter1="tokenize1 $down"
Tout simplement, non ?
nbonnet
Messages postés
478
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013
46
25 sept. 2009 à 14:48
25 sept. 2009 à 14:48
euh non car si je met les " avant le nom de la fonction et a la fin de la ligne le shell me le prend comme une chaine de caractère et ne va donc pas utiliser ma fonction.
j'ai essayé plusieurs config possible :
inter1=`tokenize1 $down`
inter1=tokenize1 \"`echo $down`\"
inter1=tokenize1(`echo $down`)
inter1=tokenize1($down)
inter1=tokenize1 $down
rien n'y change il ne m'affiche soit des lignes vides soit des "syntax error near unexpected token"
---------------------------------------------------------------------
La vie est-elle trop courte pour rester derrière son écran?
j'ai essayé plusieurs config possible :
inter1=`tokenize1 $down`
inter1=tokenize1 \"`echo $down`\"
inter1=tokenize1(`echo $down`)
inter1=tokenize1($down)
inter1=tokenize1 $down
rien n'y change il ne m'affiche soit des lignes vides soit des "syntax error near unexpected token"
---------------------------------------------------------------------
La vie est-elle trop courte pour rester derrière son écran?
nbonnet
Messages postés
478
Date d'inscription
jeudi 11 octobre 2007
Statut
Membre
Dernière intervention
4 septembre 2013
46
25 sept. 2009 à 16:09
25 sept. 2009 à 16:09
Bon j'ai trouvé la solution.
Premièrement le return ne renvoi que des ENTIER donc forcement ca génére une erreur.
Deuxièment il suffit pour récupérer une chaine de caractère d'utilisé une variable dans la fonction et de la réutiliser par la suite.
Enfin dans mon cas je voulais qu'une fois ma chaine renvoyé je sorte de ma boucle et donc de ma fonction j'ai utilisé un return mais sans l'exploiter.
Voici mon code final qui m'affiche donc les deux deerniers éléments de ma chaine de caractère.
down=`rrdtool fetch /usr/share/cacti/rra/phoebe_traffic_in_111.rrd MAX --start 1253743200 --end 1253743200`
function tokenize1 {
string="$1"
len="${#string}"
for (( k=0 ; k<$len ; k++))
do
if [ "${string:$k:1}" = " " ]
then
inter1="${string:$k+1}";
return
fi
done
}
function tokenize2 {
string="$1"
len="${#string}"
for (( k=0 ; k<$len ; k++))
do
if [ "${string:$k:1}" = " " ]
then
inter2="${string:0:$k}";
return
fi
done
}
tokenize1 "`echo $down`"
tokenize1 "`echo $inter1`"
tokenize1 "`echo $inter1`"
tokenize2 "`echo $inter1`"
tokenize1 "`echo $inter1`"
echo $inter1
echo $inter2
Premièrement le return ne renvoi que des ENTIER donc forcement ca génére une erreur.
Deuxièment il suffit pour récupérer une chaine de caractère d'utilisé une variable dans la fonction et de la réutiliser par la suite.
Enfin dans mon cas je voulais qu'une fois ma chaine renvoyé je sorte de ma boucle et donc de ma fonction j'ai utilisé un return mais sans l'exploiter.
Voici mon code final qui m'affiche donc les deux deerniers éléments de ma chaine de caractère.
down=`rrdtool fetch /usr/share/cacti/rra/phoebe_traffic_in_111.rrd MAX --start 1253743200 --end 1253743200`
function tokenize1 {
string="$1"
len="${#string}"
for (( k=0 ; k<$len ; k++))
do
if [ "${string:$k:1}" = " " ]
then
inter1="${string:$k+1}";
return
fi
done
}
function tokenize2 {
string="$1"
len="${#string}"
for (( k=0 ; k<$len ; k++))
do
if [ "${string:$k:1}" = " " ]
then
inter2="${string:0:$k}";
return
fi
done
}
tokenize1 "`echo $down`"
tokenize1 "`echo $inter1`"
tokenize1 "`echo $inter1`"
tokenize2 "`echo $inter1`"
tokenize1 "`echo $inter1`"
echo $inter1
echo $inter2