Bonjour !
On me demande pour mes cours de comprendre le but de ce script.
for fic in *
do
if [ -f $fic -a "./$fic" != $0 ]
then
grep "windows" < $fic > /dev/null
blacklist=$?
if [ $blacklist -eq 0 ]
then
mv $fic $POUBELLE
fi
fi
done
Etant un novice en scripting linux, je n'y comprends pas grand chose..
Merci d'avance
# T'en penses quoi toi ?
Posté par chimrod (site web personnel) . Évalué à 7.
Si c'est pour tes cours, ne t'attends pas à trouver une réponse toute faite ici. Dis nous déjà ce que tu en comprend, ça pourrait être un bon départ…
Par exemple : y a-t-il des variables d'environnements utilisées ? Qu'attend le script en entrée ? Qu'est ce qu'il produit en sortie etc…
# Le script troller
Posté par Thomas Bétrancourt (site web personnel) . Évalué à -4.
Le script cherche le mot "windows" dans tous les fichiers du répertoire courant (excepté le script lui-même), et si c'est le cas, le fichier sera déplacé dans le répertoire ciblé par la variable POUBELLE (qui n'est pas définie dans la portion que tu nous a montré).
# Ce que j'ai pu comprendre du script
Posté par EarthRape . Évalué à 2.
Merci pour vous réponses.
Je n'attendais pas la réponse toute prête mais juste comprendre à quoi correspondent les termes que je ne comprends pas.
Comme variable d'environnement, on a $POUBELLE
Je n'comprends pas la première ligne : "for fic in *"
ensuite "do" c'est "faire", cela fait partie de la boucle for
Puis la ligne suivante, je ne la comprends pas non plus: "if [ -f $fic -a "./$fic" != $0 ]"
Then fait parti de la boucle for
La ligne suivante : grep "windows" < $fic > /dev/null sert à rechercher le mot windows mais en même temps rediriger le contenu dont on ne se sert pas ? Je ne comprends pas non plus..
Les deux lignes suivantes avec "Blacklist" restent obscures pour moi aussi.
Enfin :
then toujours dans la boucle
mv $fic $POUBELLE sert à le déplacer dans la poubelle
Puis FIN.
[^] # Re: Ce que j'ai pu comprendre du script
Posté par Tonton Benoit . Évalué à 2. Dernière modification le 04 novembre 2013 à 19:54.
then fait partie de la structure du if.
On comprend bien mieux les différentes parties en indentant correctement :
Après si y'a des trucs que tu comprend toujours pas réfère-toi a la documentation sur les structures for, les structures if, les tests, les redirections.
[^] # Re: Ce que j'ai pu comprendre du script
Posté par jigso . Évalué à 3.
RTFM !
for : http://www.gnu.org/software/bash/manual/bashref.html#Looping-Constructs
if [… : http://www.gnu.org/software/bash/manual/bashref.html#Bash-Conditional-Expressions
grep et blacklist=$? : man grep et http://tldp.org/LDP/abs/html/exit-status.html
# RTFM ?
Posté par Olivier LEMAIRE (site web personnel) . Évalué à 2.
Il n'y a pas de secret, il faut lire et pratiquer… Par exemple, tu peux lire ce livre, consulter ce site et aussi celui-ci.
Les logiciels de traitement de texte sont à la rédaction ce que la 2CV est à l'automobile, une vieille voiture dont on se souvient avec nostalgie mais technologiquement dépassée
# lire ton cours
Posté par NeoX . Évalué à -1.
ben oui, logiquement dans ton cours il doit y avoir les definitions de
for ... do ... done
if ... then ... fi
et dans le pire des cas, en ligne de commande, ca doit pouvoir te renseigner :
man for
man if
[^] # Re: lire ton cours
Posté par Tonton Benoit . Évalué à 3.
info bash plutôt s'il est sous linux, chez moi j'ai les man pages des commandes "if, for…" que pour le tcl ;)
[^] # Re: lire ton cours
Posté par gouttegd . Évalué à 2.
S’il veut juste une référence rapide, il peut aussi utiliser
help for
,help if
, etc, plutôt que de consulter la page d’info complète.[^] # Re: lire ton cours
Posté par jigso . Évalué à 3.
euh faut pas pousser quand même, "man for" et "man if" ça ne marche pas.
En revanche "man bash"…
[^] # Re: lire ton cours
Posté par chimrod (site web personnel) . Évalué à 3.
te renvoie une page imbitable dans laquelle on passe des heures à trouver ce qu'on cherche ! Dire à quelqu'un d'aller chercher l'info là dedans, c'est le décourager dès le début et entretenir le cliché d'un terminal abscons et complètement hermétique.
Mieux vaut aller sur le manuel de référence déjà cité plus haut.
# Quelle formation ?
Posté par cfx . Évalué à 2.
Juste par curiosité, dans quelle formation et en quelle année on te demande ce genre d'exercices ?
# Merci encore pour vos réponses
Posté par EarthRape . Évalué à 2.
Je suis actuellement en première année à Epitech
Je vais lire les sources que vous m'avez indiqué. Merci
[^] # Re: Merci encore pour vos réponses
Posté par jigso . Évalué à 6.
Question subsidiaire : que se passe-t-il si tu retires " -a "./$fic" != $0 " du test ?
ça me rappelle quand j’étais étudiant, on avait comme exercice en shell de faire un parcours récursif des répertoires en affichant les fichiers au passage.
Pour faire joli j'avais voulu rajouter "--->" devant le nom du fichier, et donc " echo ---> $file "…
# mais mais mais
Posté par fearan . Évalué à 2. Dernière modification le 04 novembre 2013 à 19:53.
faut pendre le prof qui a pondu ce script (nan j'déconne ;) ça permet de décomposer le code
ensuite je ferai plutôt du
et enfin je me poserai la question de faire
ou encore
ou pour prendre en compte le cas où aucun fichier ne corresponds
on pourrait aussi faire du
Bon je vais m'arrêter là. On peut avoir plein de variation comme mettre le test dans le while plutôt qu'une exclusion par grep ;)
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: mais mais mais
Posté par Benoît Sibaud (site web personnel) . Évalué à 3.
J'ai corrigé la mise en forme de ton commentaire pour qu'il soit lisible et colorié.
[^] # Re: mais mais mais
Posté par fearan . Évalué à 2.
Merci ;)
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: mais mais mais
Posté par NeoX . Évalué à 1.
sauf que le but de l'execise n'est surement pas d'optimiser mais de decouper le probleme en plusieurs morceaux facilement identifiables/modifiables
[^] # Re: mais mais mais
Posté par mornik . Évalué à 1.
oui mais je trouve surtout dommage de ne pas utiliser "correctement" une commande.
grep à des options, il faut les enseigner. Surtout les options POSIX, sinon on prend de moins bonnes ou carrément mauvaises habitudes.
# Merci
Posté par EarthRape . Évalué à 0.
Je comprends toujours pas à quoi sert fic et surtout la Blacklist, que vient elle faire dans le script ?
[^] # Re: Merci
Posté par Benoît Sibaud (site web personnel) . Évalué à 3.
Pour fic : quand tu vois ce qui suit, tu te demandes à quoi sert i ?
Pour blacklist, la variable peut être supprimée :
Du coup la question est que veut dire $? en bash, et ensuite quand est-ce que grep renvoie 0 ?
[^] # Re: Merci
Posté par fearan . Évalué à 4.
Que la prochaine fois tu iras en cours ?
Que la prochaine fois tu liras les manuels ?
$ man bash
$ man grep
ou plus simple ask/bing/ddg/google/qwant -> tutorial bash
fic est une variable, ici utilisé comme itérateur de boucle, blacklist est aussi une variable qui prends la valeur de $?, la variable $? est une variable automatique de bash dont tu pourra trouver la signification dans le manuel
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: Merci
Posté par totof2000 . Évalué à 2.
Je te trouve un peu dur là. Quand j'ai commencé à programmer en shell, je me rappelel avoir eu du mal avec les variables de boucle, et le prof était allé un peu vite sur ces "détails" qui peuvent paraître évidents pour un habitué mais pas forcément pour un novice. Le shell est un langage étrange au début pour toute personne habitué au C/C++ par exemple.
De plus il arrive parfois que des profs donnent des choses à faire et à comprendre sans forcément donner tous les éléments nécessaires dans le cours, sans compter sur le fait que certains cours sont mal faits. Donc certes, je suis d'accord avec ceux qui donnent des pistes, sans donner la réponse toute cuite, mais là je trouve que tu y vas un peu fort.
Pour le posteur initial : peux-tu nous extraire la partie de ton cours qui traite des boucles for et nous indiquer pourquoi tu ne la comprends pas ?
[^] # Re: Merci
Posté par fearan . Évalué à 2.
à ton époque, probablement pré 2002, le réflexe des moteurs de recherche était probablement moins prononcé, et leurs résultat moins bon, aujourd'hui quand tu tapes shell for dans google tu tombes sur http://www.linuxfr-france.org.invalid/article/dalox/unix04.htm en deuxième position.
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: Merci
Posté par totof2000 . Évalué à 2.
Je l'ai fait avant de répondre, et pour quelqu'un qui n'y connait rien en shell, c'est difficile de faire le tri entre les bons tutoriels et les mauvais. De plus, il est parfois difficile de chercher avec les bon mots clé pour avoir rapidement le bon site.
Le problème aujourd'hui c'est que beaucoup de monde crée son site pour ne rien dire ou pour pas grand chose : et il m'arrive souvent, pour des sujets que je ne connais pas, de devoir épelucher une vingtaine de sites inintéressants pour pouvoir trouver un bout d'info qui m'intéresse, et de n'avoir l'info pertinente qu'au bout de quelques heures de recherche et d'affinement d'expression à donner à Google.
[^] # Re: Merci
Posté par fearan . Évalué à 2.
Faut pas déconner le premier résultat de google quand on réclame tutoriel shell est http://doc.ubuntu-fr.org/tutoriel/script_shell ; c'est aussi le même si premier on réclame tutoriel bash, avec en prime un second résultat http://linuxfr.org/forums/programmationautre/posts/bon-tutoriel-pour-le-bash plutôt explicite.
Bref, ici google donne des résultats qui réponds aux questions, programmation shell donne en premier résultat un pdf qui réponds au moins aux questions sur la boucle for
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.