Transformation d'une chaine de caractères en entier - Shell/Batch - Programmation
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).
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.
Marsh Posté le 02-11-2006 à 03:23:49
C'est probablement que nb ne represente pas un chiffre...
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.
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" |
marc90 a écrit : $nb=`wc -l` |
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
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...
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.
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...
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?