Bash aide projet - Shell/Batch - Programmation
Marsh Posté le 19-11-2011 à 14:35:21
salut,
quelle version de bash ? parce que à partir de la version 4, il dispose de tableaux associatifs qui vont beaucoup te faciliter les tâches de l'indexation et du comptage.
Marsh Posté le 21-11-2011 à 18:07:52
la version actuelle de linux j'utilise pour mon bash , mais je ne maitrise pas du tout les tableaux associatif enfin bon d'un coté ca me permettrait d'en apprendre et me simplifier la vie ,
Marsh Posté le 24-11-2011 à 19:08:54
actuelement mon script Non optimiser !! ressemble a cela bien sur il n'est pas terminer
Citation : #!bin/bash |
Marsh Posté le 24-11-2011 à 21:34:41
flaschgordon a écrit : actuelement mon script Non optimiser !! ressemble a cela bien sur il n'est pas terminer |
Salut
Attention aux emplois inusités de l'infinitif en lieux et place du participe passé...
flaschgordon a écrit :
|
Bon, petit récapitulatif des pb de ton scripts
1) le shell est très limité comme langage. C'est fait exprès pour qu'il perde le moins de temps possible à essayer de comprendre ce que tu lui as tapé. Corollaire, il te faut être super rigoureux dans ta syntaxe. Et un de ses impératifs est de bien séparer les éléments.
Donc while [$Url -ne '.'] ne sera pas compris pas alors que while [ $Url -ne '.' ] le sera.
Accessoirement, -ne est fait pour comparer du numérique. Comparer des chaines c'est = ou != donc while [ $Url != '.' ]
Ce qui nous amène au pb suivant (mais là c'est un truc très pointu): un des gros dangers de cette syntaxe c'est que si l'utilisateur ne rentre rien, la variable $Url sera vide et que dans ce cas, le shell verra while [ != '.' ]
Cependant, l'opérateur != veut impérativement 2 opérandes et si le shell n'en voit qu'un, il ne s'en sort plus (toujours le pb du temps d'interprétation)
Pour pallier ce souci, encadrer la variable par des guillemets => while [ "$Url" != "." ]
Ainsi, même si $Url est vide, le shell verra while [ "" != "." ] et comprendra quand-même l'instruction...
2) séparer les instructions. read sert à lire une info dans l'entrée standard et à la stocker dans une variable, rien d'autre (et surtout elle n'affiche rien). Donc read Url >> listeUrl redirigera ce qu'affiche l'instruction read (donc pas grand chose) dans le fichier listeUrl. C'est syntaxiquement correct mais cela ne fera pas ce que je crois que tu veux faire.
Si tu veux faire saisir une url et la stocker dans un fichier, alors 2 étapes
read Url
echo "$Url" >> listeUrl
3) la lecture d'un fichier => là il faut bien comprendre les principes
read sert à lire l'entrée standard et à stocker cette entrée dans une variable. Le marqueur de fin de lecture c'est la touche <return>. Or, coup de bol, chaque ligne d'un fichier se termine par un <return>.
De plus, cette commande, comme toute commande Unix, renvoie un état. Et il se trouve que cet état est à faux si elle ne lit rien. Donc on peut boucler sur un while read (rappel: while peut vérifier toute commande quelle qu'elle soit) et ainsi rester dans la boucle tant que qqchose a été lu.
Et enfin l'entrée standard, utilisée par défaut pour le read, peut être redirigée à partir d'un fichier via l'opérateur "<" (et aussi, si on le désire, d'une commande via un pipe).
Ce qui donne la structure générale suivante
Code :
|
Ainsi, chaque ligne lue sera stockée dans la variable "$ligne" puis traitée dans la boucle. Et quand tout le fichier aura été traité, le read ne lisant plus rien renverra "faux" et le while s'arrêtera. Et cette syntaxe démontre (s'il était nécessaire), que la structure while ... do ... done est compris comme étant qu'une seule et unique commande (puisque la redirection <listeUrl s'applique à la commande qui la précède)
Donc voilà. J'espère qu'avec ces quelques notions tu t'en sortiras. Si tu veux, tu as un cours complet de shell ici => http://fr.lang.free.fr/cours/Shell_v2.0.pdf
Tableaux associatifs ??? Cette notion existe en php, existe en perl, existe en Python... mais je ne savais pas qu'elle avait été intégrée dans le shell. De mon coté j'étais resté aux tableaux simples (ceux qui ont un indice) et ce genre de tableau n'est seulement connu que des shells évolués (ksh, bash et au delà). Et généralement j'arrive toujours à m'en passer surtout si je programme des scripts portables pour tout type de shell...
Marsh Posté le 25-11-2011 à 16:21:23
Veuillez excuser mes quelques fautes d'orthographes c'est vrai que j'ai quelques difficultés enfin merci
Tout d'abord un grand merci pour vos informations clairs , précises , et complètes je pense donc qu'avec tout ce que vous avez pu me dire je réussirez a réalisez mon script , et par la même occasion a en apprendre un peu plus sur les subtilité du bash.
Merci également pour votre site , je cherchez justement un site expliqué en français , et expliquant les notions de bash et je n'avais jusque la pas trouvé quelque chose qui me paraissait convenable
Voila je pense a part si d'autre personne on quelque informations complémentaire et intéressant a apporter ce qui m’intéresserai également , que l'on peut clore le sujet
Je vous remercie De m'avoir aidé
Amicalement Flasch
Marsh Posté le 04-12-2011 à 19:24:52
J'aurai encore besoin d'une petite aide je n'arrive pas a comprendre
Voici mon script presque final
Code :
|
Voila lors de la premiere boucle ou je demande un point pour sortir de la boucle je suis obliger de tapez un point puis un autre pour que le programme valide
Merci a vous encore , et merci par avance de votre aide sa doit etre tout ptit mais je ne vois pas
Marsh Posté le 11-12-2011 à 10:07:19
Bonjour et merci de votre aide j'ai trouver pour le point
Mais maintenant se pose un autre soucis si vous pouviez m'apporter votre aide
a la fin de mon script
Code :
|
Voila en faite je voudrais concatener tout ce qu'il ya dans un repertoire grace a une boucle je sais pas i comme ca je peut y arriver je sollicite votre aide si possible
Merci beaucoup
Marsh Posté le 12-12-2011 à 20:13:21
flaschgordon a écrit :
|
Code :
|
flaschgordon a écrit :
|
Mauvaise syntaxe. Il faut mettre des backquottes à la commande "ls" et non des quottes simples (voir ton cours pour la différence entre quottes et backquottes)
Toutefois, même avec une bonne syntaxe, si jamais tu as un nom de fichier avec espace, le for n'appréciera pas du tout !!!
Mieux vaut passer par un traitement du ls ligne à ligne par read (exactement comme on traite un fichier). Et aussi filtrer les fichiers pour ne concaténer que les fichiers ordinaires...
Code :
|
Marsh Posté le 13-12-2011 à 04:21:55
salut,
pourquoi une boucle appelant autant de fois cat fichier par fichier ?
on est en bash, on peut faire un tableau
Code :
|
Marsh Posté le 17-12-2011 à 21:20:21
merci beaucoup , je vais essayer ca ce week-end et je vous tient au courant merci encore a vous
Marsh Posté le 18-12-2011 à 12:59:54
voila ce que cela me met dans la console
Code :
|
Je ne comprend pas du tout
Code :
|
Voila mon code je ne comprend pas du tout
en sachant que mon arborescence se presente comme ceci
merci de votre aide si quelqu'un a une solution ca serait vraiment la bienvenue
Code :
|
Marsh Posté le 19-11-2011 à 12:30:32
Bonjour , et merci par avance de votre aide je souhaiterai réaliser un script dans le cadre de mes études en DUT informatique et je sollicite votre aide
But du script : je cherche a réaliser un script qui a l'aide d'Url prédéfinis dans un fichier .txt ou soit entré par l'utilisateur et stocker dans un fichier txt , Cherche les occurrences des mots qui se trouve dans cette Url , je m'explique un peu mieux , L'utilisateur va rentrez une ou plusieurs Url qui seront ensuite regroupé ligne par ligne dans un fichier texte , Mon script va lire ces Url et va dire combien de fois il trouve les occurrences des mots sur ces site ( par exemple si il trouve Bonjour 15 fois il marquera dans un fichier texte annexe bonjour : 15 ) je ne sait pas trop par quoi commencer et j'avoue avoir pas mal de difficulté avec le BAsh si quelqu'un pouvez m'aider a la réalisation de script je le ou / les remercierez par avance
merci encore de votre aide