|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
![]() ![]() ![]() Idriss NeumannConsultant en SSII et auditeur au CNAM Paris (ingénieur SI) Inscription : février 2009 Messages : 3 775 ![]() |
Bonjour à tous.
Je vous présente une nouvelle liste d'exercices corrigés avec un format plus adapté : Exercices shell scripts. Citation:
Je remercie déjà tout les participants qui sont mentionnés ici. Cordialement, Idriss |
|
|
30
|
|
|
#2 | ||
|
Invité régulier
![]() Inscription : juin 2010 Messages : 5 ![]() |
Solution proposée:
Code :
|
||
|
|
10
|
|
|
#3 |
![]() ![]() ![]() Idriss NeumannConsultant en SSII et auditeur au CNAM Paris (ingénieur SI) Inscription : février 2009 Messages : 3 775 ![]() |
Bonjour jsnooper.
Merci de ta participation, toutefois cette solution ne répond pas à la contrainte qui est de passer par l'algorithme du tri à bulle (sinon un sort aurait suffit ).En effet il existe différentes possibilités pour trier des éléments et la tienne est efficace mais ne répond pas à cette contrainte "pédagogique". Toutefois, lorsque j'aurais un peu de temps, ça vaudrait peut être le coup de faire un exercice plus général sur les façons de trier des éléments. Je vous laisse exprimer vos avis dessus et éventuellement proposer d'autres solutions. Qu'en pensez-vous ? Encore merci ![]() Idriss |
|
00
|
|
|
#4 |
|
Invité régulier
![]() Inscription : juin 2010 Messages : 5 ![]() |
Ok... Désolé de ne pas avoir bien lu l’énoncé !
@++ |
|
|
00
|
|
|
#5 | ||||
|
Invité régulier
![]() Développeur en systèmes embarqués Inscription : juillet 2012 Messages : 1 ![]() |
Plutôt qu'un
Code :
Le cat est superflu, préférons : Code :
|
||||
|
|
30
|
|
|
#6 | |
|
Expert Confirmé
![]() frederic francesConsultant informatique Inscription : juin 2009 Messages : 1 848 ![]() |
j'ai parcouru rapidement la liste d'exercice, c'est assez intéressant, par contre je ne vois pas ou est le focus pédagogique...
je m'explique, quand on prend par exemple le premier exercice: Citation:
ici par exemple ce serait la manipulation des structures de contrôle et plus particulièrement les structure conditionnelle.... bref je pense que avoir une introduction sur les éléments de langage à manipuler est important pour ce type d'exercice. note pour ce premier exercice il est aussi possible d'utiliser select. http://homel.vsb.cz/~dvo25/reily/boo...sh/ch05_04.htm
__________________
bazar: http://www.improetcompagnie.com/publ...ctacles-6.html BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil Emacs Wiki: http://www.emacswiki.org/ En attente de ce que produira: http://www.pushmid.com |
|
|
|
10
|
|
|
#7 | |||||
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 4 224 ![]() |
Citation:
la variable de read est REPLY elle existe déjà et elle est chargée aussi si on utilise une variable personnelle !! bref c'est une perte de temps systeme et de memoire d'en charger 2 plutot qu'une |
|||||
|
|
10
|
|
|
#8 | |||
![]() ![]() ![]() Idriss NeumannConsultant en SSII et auditeur au CNAM Paris (ingénieur SI) Inscription : février 2009 Messages : 3 775 ![]() |
Bonjour.
Merci à tous pour ces suggestions, je ferais de tests et mettrai à jour la liste quand j'aurais un peu de temps ![]() J'essayerai d'adapter par rapport à la remarque de Louson qui est tout à fait juste, dans un premier temps. Ensuite pour ce qui est d'un focus sur les compétences de chaque exercice, c'est une bonne idée également ![]() Citation:
read => $REPLY existe avec la valeur lue read line => $line existe avec la valeur lue mais pas $REPLY Un exemple pour s'en convaincre : Code :
|
|||
|
00
|
|
|
#9 | ||
|
Expert Confirmé
![]() frederic francesConsultant informatique Inscription : juin 2009 Messages : 1 848 ![]() |
Citation:
j'ai fait un test rapide avec un fichier de 10000 lignes différentes chaque ligne contenant 70 caractères j'ai le résultat suivant en utilisant time pour mesurer le temps d’exécution des scripts. Citation:
__________________
bazar: http://www.improetcompagnie.com/publ...ctacles-6.html BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil Emacs Wiki: http://www.emacswiki.org/ En attente de ce que produira: http://www.pushmid.com |
||
|
|
00
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() ![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 495 ![]() |
Moi aussi. Et n'oublions pas ceux qui bossent sur des shells plus anciens où la variable REPLY n'existe pas (style Bourne Shell ou Korn Shell)...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|
|
00
|
|
|
#11 |
![]() ![]() ![]() Idriss NeumannConsultant en SSII et auditeur au CNAM Paris (ingénieur SI) Inscription : février 2009 Messages : 3 775 ![]() |
Bonjour.
J'ai effectué une première mise à jour de la liste en améliorant les parcours des fichiers suite à la remarque de Louson (merci à lui). Pour le focus, on verra plus tard, mais je suis totalement pour ![]() Cordialement, Idriss |
|
10
|
|
|
#12 |
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 868 ![]() |
La variable REPLY existe en Korn Shell 88
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
|
|
|
10
|
|
|
#13 |
|
Expert Confirmé Sénior
![]() ![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 495 ![]() |
Désolé, j'ai lancé ça au bluff n'ayant pas de ksh pour vérifier
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|
|
00
|
|
|
#14 | ||
|
Invité de passage
![]() Inscription : avril 2007 Messages : 1 ![]() |
Bonjour
je vous propose d'utiliser la fonction grep avec l'option -c Code :
|
||
|
|
00
|
|
|
#15 | ||||||
|
Expert Confirmé Sénior
![]() ![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 495 ![]() |
Salut
Merci de ton effort mais maintenant, on va un peu tailler dans le vif. Déjà, tu fais 3 fois "ls -l" ce qui est une opération assez coûteuse. Tu pourrais factoriser un peu ça et stocker le résultat dans une variable que tu réutiliserais 3 fois. Ensuite pareil pour l'appel calcul. Si le nom est vide lancer calcul sinon lancer calcul. Surtout que nom est issu de $1 (moi j'admire les gens qui ont une pièce dans la main droite mais qui la font d'abord passer dans la main gauche avant de payer => pourquoi ne pas utiliser directement $1 ???) et donc il ne peut pas être vide (sauf si $1 est vide mais dans ce cas ça veut dire qu'il n'y a pas d'argument donc $# vaut 0). De plus, s'il y a un paramètre $1 alors peut-être qu'il y en a plusieurs $2, $3 $4 dont l'utilisateur aimerait aussi avoir le calcul... Et enfin tu appelles calcul en lui passant $nom comme paramètre. Or, la fonction n'utilise pas ce paramètre (qui est "$1" pour elle) mais directement la variable globale $nom. Ca c'est le pire... Donc en appliquant ces remarques, cela donnerait le code suivant Code bash :
Ca c'était le plus facile. Ensuite, plus délicat: rendre ta fonction plus universelle. En effet, ta fonction fait le calcul puis affiche le résultat. Mais peut-être que l'utilisateur ne veut pas afficher le résultat. Peut-être qu'il désire juste avoir les valeurs pour s'en servir lui dans des calculs plus complexes. Donc on va réduire la fonction à son travail le plus basique et le plus atomique: récupérer juste les valeurs et les renvoyer à l'appelant qui, lui, les utilisera comme il le sent Code bash :
Et voici une façon possible de s'en servir Code bash :
PS: les parenthèses dans la fonction c'est en plus pour rendre les variables locales à la fonction. Pour éviter par exemple une collision entre le "nbx" de la fonction et une variable nommée aussi "nbx" dans ton code principal. Sans les parenthèses, le nbx de la fonction écrase alors le nbx du code principal. Hé oui, les globales en shell c'est utile mais ça a aussi ses désavantages...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
||||||
|
|
10
|
|
|
#16 |
|
Membre éclairé
![]() Inscription : septembre 2005 Messages : 255 ![]() |
Ceci a l'avantage d'être un forum. Je préférerais une page de liens vers les vrais questions posées par les vrais gens sur de vrais situations, rangés par thème. Les problèmes posés ici sont trop subjectifs et ex nihilo.
(perso, je n'en résous aucun par bash mais sed ou awk) Cela dit, bonne initiative
__________________
Cette réponse vous plaît? Cliquez sur en bas à droite du message.Votre problème est résolu? Cliquez sur en bas de page.Linux, Java, C++, Python, Emacs, sed |
|
|
00
|
|
|
#17 |
![]() ![]() ![]() Idriss NeumannConsultant en SSII et auditeur au CNAM Paris (ingénieur SI) Inscription : février 2009 Messages : 3 775 ![]() |
Bonjour.
Pour répondre à Flodelarab. Ceci est une liste d'exercice plutôt orientée débutant. Elle n'a pas pour vocation à lister des cas pratiques que l'on rencontre dans le cadre de son travail mais simplement de permettre aux débutants de mettre en pratique des structures shells. Il serait difficile de recenser toutes les questions pro dans un articles pour deux raisons. D'une part parce qu'il y en a beaucoup. Les habitués des forums shells Unix et Linux répondent régulièrement à des questions shells avec des solutions diverses et variés : sed et awk sont très présents mais pas que : parfois join c'est pratique, parfois sort et uniq suffisent, parfois cut suffit aussi et est plus léger, parfois grep ou même les fonctionnalités que permettent bash 3 (comme les condition sur expressions régulières) sont suffisantes pour répondre à des problèmes. D'autre part parce que cela serait inutile : les problématiques résolues sont nombreuses avec des réponses pertinentes, il suffit de faire des recherche. Je ne vois pas l'utilité de référencer 90% des questions posées dans ces forums sur une page, ça n'aiderait pas plus ![]() Bref, chaque article a ses vocations. Pour les problématiques précises et dans un contexte professionnel soit on trouve des problématiques similaires résolue par des réponses riches et pertinente sur le forum ce qui arrive très souvent. Soit on la pose et très probablement, une solution sera trouvée rapidement si le posteur fait les efforts nécessaires. Et quant au fait de n'utiliser que sed et awk : je résout beaucoup de problèmes avec mais c'est pas systématiquement la solution la plus adaptée et surtout la plus performante (j'ai eu à de plusieurs reprises des cas où la commande join à titre d'exemple était beaucoup plus efficace même si c'était faisable avec gawk, pareil pour bash en lui même). Bon voilà, on peux envisager d'intégrer des exercices avec des solutions en sed et awk, encore faut-il en proposer... Cordialement, Idriss |
|
00
|
Copyright © 2000-2013 - www.developpez.com