Transformation d'une chaine de caractères en entier

Transformation d'une chaine de caractères en entier - Shell/Batch - Programmation

Marsh Posté le 01-11-2006 à 14:22:53    

La commande wc -l renvoit une chaine de caractère apparement. Comment transformer cette dernière en un entier?  

Reply

Marsh Posté le 01-11-2006 à 14:22:53   

Reply

Marsh Posté le 01-11-2006 à 16:28:03    

En shell, chaine de caractere, entier, c'est tout pareil. L'important c'est le contexte dans lequel tu les utilises (par exemple, == interprete le truc comme une chaine, -eq comme un nombre).

Reply

Marsh Posté le 01-11-2006 à 21:40:53    

Daccord mais je n'arrive pas à utiliser le résultat obtenu dans une opération.
$nb=`wc -l`
while(($num<$nb))
Si je remplace $nb par un chiffre la boucle marche.

Reply

Marsh Posté le 02-11-2006 à 03:23:49    

C'est probablement que nb ne represente pas un chiffre...

Reply

Marsh Posté le 02-11-2006 à 13:53:31    

En fait quand on fait wc -l nomFichier, le résultat est le nombre de ligne suivit de nomFichier.
Si on fait more nomFichier|wc -l, cela retourne le nombre de ligne.

Message cité 1 fois
Message édité par marc90 le 02-11-2006 à 13:55:45
Reply

Marsh Posté le 02-11-2006 à 14:17:07    

matafan a écrit :

En shell, chaine de caractere, entier, c'est tout pareil. L'important c'est le contexte dans lequel tu les utilises (par exemple, == interprete le truc comme une chaine, -eq comme un nombre).


Les syntaxes "=" (et non "==" qui n'existe pas) et "-eq" sont des options de la commande "test". C'est cette dernière qui interprète le truc et non le shell lui-même.
Mais en effet, la remarque est intéressante. Exemple

var="01"
test $var -eq 1 && echo "test 1 réussi"       # Ca marche
test "$var" = "1" && echo "test 2 réussi"      # Ca ne marche pas


 

marc90 a écrit :

$nb=`wc -l`
Si je remplace $nb par un chiffre la boucle marche.


La syntaxe exacte serait "nb=`wc -l`" et non "$nb=`wc -l`" (erreur de frappe ici ou dans ton script ???)
 

marc90 a écrit :

Si on fait more nomFichier|wc -l, cela retourne le nombre de ligne.


cat nomFichier |wc -l [:aloy]
Pas besoin de demander une commande paginée alors qu'on n'utilise pas l'effet de pagination...
 
On peut aussi s'en sortir en faisant

Citation :

nb=`wc -l nomFichier |cut -f1`

pour supprimer le nom. Cela est un poil plus rapide car dans le "cat |wc", on traite 2 fois le contenu du fichier alors que dans cette 2° solution, on ne le traite qu'une fois...


Message édité par Sve@r le 02-11-2006 à 14:25:08

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 02-11-2006 à 16:16:20    

Ha oui exact, merci pour le truc.

Reply

Marsh Posté le 02-11-2006 à 19:07:09    

== est reconnu par la plupart des shells, mais tu as raison la syntaxe historique est =. Par contre dans tous les shells, test (dont [ ... ] est une sorte d'alias) est un built-in. Les = et autres -eq sont donc interpretes par le shell, pas par une command externe.

Reply

Marsh Posté le 03-11-2006 à 18:36:34    

matafan a écrit :

test (dont [ ... ] est une sorte d'alias) est un built-in. Les = et autres -eq sont donc interpretes par le shell, pas par une command externe.


S'il est exact que quand on tape "which test" on obtient "shell built-in", il n'empêche qu'on trouve aussi la commande /bin/test (ou /usr/bin/test suivant les cas) d'où ma remarque initiale. Après tout, tout le monde ne bosse pas forcément en bash mais tout le monde a le droit d'utiliser la commande "test"...
D'ailleurs une différence existe sur les vieux systèmes entre "built-in test" et "/bin/test". Je ne me souviens plus exactement mais je crois me souvenir que la différence se situait au niveau de l'option "-L". L'une des deux ne pouvait pas détecter les lien symboliques...
 
Autre remarque dans le même style: il y a une grosse différence entre le built-in "pwd" et la commande "/bin/pwd". En effet, quand on se place dans un lien symbolique, l'une des deux donne le chemin tapé (le nom du lien) et l'autre donne le répertoire réel...


Message édité par Sve@r le 03-11-2006 à 18:36:55

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed