Monsieur Banane Posté(e) le 14 octobre 2006 Signaler Partager Posté(e) le 14 octobre 2006 Boujour, apres avoir passé 3h de TP + 5h cette aprem, je suis arrivé au 11eme script shell que j'ai à faire. Et la, j'en peut plus, c'ets erreur sur erreur... je croi qu'on peut faire plus simple! Enoncé : La commande extract [-b n1] [-e n2] [file] Ecrivez cette commande qui extrait du fichier "file" (ou de l'entrée standard si aucun fichier n'ets précisé en ligne de commande de n1 à n2, incluses. Si n1 (resp. n2) n'est pas précisé, alors, on considere que sa valeur est 1 (resp. la derniere ligne du fichier). Indication : head, tail et cat vous seront utiles. voila, moi, j'ai fait un truc avec des if if if if if, et ca marche pas... je croi qu'il faut trouver plus simple (genre avec "shift" ou des boucles...) merci de votre aide Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xr Posté(e) le 15 octobre 2006 Signaler Partager Posté(e) le 15 octobre 2006 #! /bin/bash FROM="" TO_CMD="cat" FILE="-" if [ "$1" = "-b" ]; then shift FROM="$1" shift else FROM=1 fi if [ "$1" = "-e" ]; then shift TO_CMD="head -n $1" shift fi if [ -n "$1" ]; then FILE="$1" fi cat $1 | $TO_CMD - | tail -n +$FROM -Y'a peut-être un bug quand aucun argument n'est donné (y'a peut-être plein de bugs en fait) et c'est pas nécessairement propre. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Monsieur Banane Posté(e) le 15 octobre 2006 Auteur Signaler Partager Posté(e) le 15 octobre 2006 ... merci beaucoup, mais on a pas vu FROM, TO_CMD, et FILE ... jvai regarder ca, et au pire, jdemanderai au prof demain Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xr Posté(e) le 15 octobre 2006 Signaler Partager Posté(e) le 15 octobre 2006 C'est juste des variables que je définis moi-même Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Grounch Posté(e) le 15 octobre 2006 Signaler Partager Posté(e) le 15 octobre 2006 Un ptit HS, mais tu fais sa dans quels cours? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Monsieur Banane Posté(e) le 15 octobre 2006 Auteur Signaler Partager Posté(e) le 15 octobre 2006 C'est juste des variables que je définis moi-même .... ptdr .... je re-regarde ca demain, mais avec le shift, ca a l'air bien plus simle! Un ptit HS, mais tu fais sa dans quels cours? "systeme utilisateur" pour l'instant, c'est des cours sur les commandes UNIX (de bases et plus complexes, expressions rationnelles, remplacement avec sed ... , et on vient d'attaquer les script shell). On a 2h de cours TD , et 3 h de TP Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Grounch Posté(e) le 15 octobre 2006 Signaler Partager Posté(e) le 15 octobre 2006 Oui mais en quelle classe? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Monsieur Banane Posté(e) le 15 octobre 2006 Auteur Signaler Partager Posté(e) le 15 octobre 2006 IUT info, 1ere année Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Grounch Posté(e) le 15 octobre 2006 Signaler Partager Posté(e) le 15 octobre 2006 IUT info, 1ere annéeOk merci de l'info Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
GrandMiam Posté(e) le 15 octobre 2006 Signaler Partager Posté(e) le 15 octobre 2006 Hum le shell, on en a fait pendant 2 jours c'pas mal, ça sera surrement moins drôle quand on devra le recoder... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xr Posté(e) le 16 octobre 2006 Signaler Partager Posté(e) le 16 octobre 2006 En l'occurence, ce serait beaucoup plus facile de recoder ce truc en C. Plus efficace, aussi. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Monsieur Banane Posté(e) le 17 octobre 2006 Auteur Signaler Partager Posté(e) le 17 octobre 2006 (modifié) voila la correction : begin=1 end=1 while [ $# -ne 0 ]; do case "$1" in "-b") begin=$2; shift "-e") end=$2; shift *) break;; esac done fic=$1 cat (et la, jvien de me rendre comte que j'ai pas pris le reste de la correction ... lol ... dsl!) on avait pas encore vu les case et break, dc personne a su le faire, jai demandé au prof comment faire sans, il m'a regardé lair de dire "ne pose plus jamais de questions comme celle la" Modifié le 17 octobre 2006 par Monsieur Banane Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Xr Posté(e) le 18 octobre 2006 Signaler Partager Posté(e) le 18 octobre 2006 Dis à ton prof que extract [-b n1] [-e n2] [file] n'accepte pas extract -e foo -b bar stricto sensu parce que ça indique que les arguments sont optionnels, pas qu'on peut les permuter (la preuve en est que tu ne peux pas mettre file où tu veux non plus) et qu'au lieu de bricoler des switch, il devrait utiliser getopt. Enfin, lui dis pas, pense le juste très fort Et ta correction me semble bizarre. Si tu la teste, tu verras qu'elle parse juste le premier argument (et qu'elle compile pas du tout même parce qu'il manque des ";;"). Je pourrais aussi troller en disant que "extract -b 1 -e 3 fichier et j ajoute 70 arguments si je veux" fonctionne aussi, mais comme j'ai pas vérifié non plus, je vais me taire. Ou pas... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.