ls_binaries () { rep="./" ; [ ${#1} -gt 0 ] && rep=$1 ; find $rep -type f -perm +a+x; }
#!/bin/sh find ${1:-.} -type f -perm +111 -maxdepth 1 # FDF
Citation
Kaka
Bonjour !!
je ne connais pas bien unix, je suis en train de
l'étudier et je dois faire un petit exercice :
je dois écrire un script qui affiche uniquement
les fichiers exécutables présent dans le
repertoire courant.
Ensuite le modifier pour qu'il puisse recevoir le
nom d'un repertoire en paramètre.
"lsx" est le nom du repertoire.
Cours complet de shell iciCitation
Kaka
Pouvez-vous m'aider s'il vous plait.
ls -F | grep "\*" | tr -d "*"Un for/do/done pour effectuer un tri, je trouve tout de même ça un peu overkill car rien ici ne justifie d'individualiser le traitement des fichiers.
Citation
Mushroom
Mais si vraiment tu veux rester avec des commandes
de base, voici qui peut aussi convenir :
ls -F |
grep "\*" | tr -d "*"
En fait, je pense que ce TP a été "inventé" (car l'utilité réelle d'un tel script reste un peu limite) uniquement pour forcer Kaka (super le pseudo !!!) à décomposer son pb en succession de tâches élémentaires. La solution de Romy présente donc, pour moi, celle qui répond le mieux aux exigences du TP et elle est 100% pur Bourne Shell.Citation
Mushroom
Un for/do/done pour effectuer un tri, je trouve tout de même ça un peu overkill car rien ici ne justifie d'individualiser le traitement des
fichiers.
Citation
Mushroom
Compliqué, il ne faut rien exagérer, si le code de
Frédéric Brugmans introduit effectivement la
notion de fonction, le mien est à 99% une simple
exploitation de man find.
Mais si vraiment tu veux rester avec des commandes
de base, voici qui peut aussi convenir :
ls -F |
grep "\*" | tr -d "*"
Un for/do/done pour effectuer un tri, je trouve
tout de même ça un peu overkill car rien ici ne
justifie d'individualiser le traitement des
fichiers.
echo "2¢">>fontaine
Certes, d'un autre côté c'est pas la seule commande à qui ça posera problème, donc l'erreur est côté utilisateur pas côté script. D'expérience, la phase où un script s'alourdit le plus est celle où tu imagines quelles bêtises pourraient avoir été commises en entrée... donc à un moment il faut dire "zut ! tant pis pour lui." et celle-ci est àmha plus que border-line.Citation
nicola
Sauf que ton exemple est embêtant si le nom de ton fichier contient des *. Ben oui, il y a toujours des boulets.
C'est clair que par rapport à un find, c'est de la semoule trop cuite. D'un autre côté, -F est référencée par le man dans les options POSIX, on peut donc supposer une certaine portabilité. Mais bon, je la donnais juste pour éviter le for/do/done qui est assez lourd (surtout en bash qui n'a tout de même rien d'un guépard côté vitesse d'exécution). Personnellement, je ne l'utiliserais pas, tout comme je n'utiliserais jamais un for/do/done.Citation
Sve@r
Hum, moi je dis non. Autant j'aimais bien le find que je trouvais élégant, autant j'aime pas du tout cette solution qui utilise un effet d'affichage de "ls" pour extraire les lignes contenant "*" (d'ailleurs on peut mettre grep "\*$" pour ne prendre que ce qui finit par "*").
Comme le sujet mentionnait unix sans autres précisions, j'ai testé le code en Ash Shell qui a vocation à rester le plus proche possible du Bourne Shell... àmha si ça passe en Ash, ça passe partout ou presque (avec tous les dérivés du Bourne Shell).Citation
Frédéric Brugmans
1- Tu utilises non pas simplement find, mais également une particularité certains shells
Totalement d'accord...Citation
Mushroom
Néanmoins le shell devient àmha intéressant à partir du moment où on se met à exploiter le
potentiel des commandes... d'ailleurs qu'est la
programmation shell si ce n'est la combinaison des
sorties de différentes commandes ?
Citation
Mushroom
Comme le sujet mentionnait unix sans autres
précisions, j'ai testé le code en Ash Shell qui a
vocation à rester le plus proche possible du
Bourne Shell... àmha si ça passe en Ash, ça passe
partout ou presque (avec tous les dérivés du
Bourne Shell).
D'accord, en fait j'ai eu un peu de mal à saisir le ton car le 1% manquant au man find faisait précisément référence à ça. ;-)Citation
Frédéric Brugmans
Ce n'est pas un reproche image c'est une précision
Etonnant !!! Ton script n'utilise pas une syntaxe particulière de shell mais des options de la commande "find". Une commande est bien indépendante de l'environnement qui l'a lancée non ?Citation
Mushroom
En poussant un peu les recherches, il semble
d'ailleurs que cette syntaxe ne soit effectivement
pas reconnue ni avec csh ni avec tcsh
Bad : modifier in $ (-)En fait les syntaxes ne semblent pas du tout les mêmes qu'avec les dérivés Bourne Shell... si j'ai bien compris, le but des Shell Unix Berkeley était de rester proches de la syntaxe C.
Oui, peu de chances que sh pointe sur autre chose qu'un dérivé Bourne Shell... même sur les BSD, il semble que ce soit le cas. :-)Citation
Sve@r
De toute façon, en écrivant "#!/bin/sh" en début de script, on s'affranchit de l'environnement de celui qui lancera le script puisque celui-ci sera traité (interprété+exécuté) par "/bin/sh"...
Citation
Mushroom
Oui, peu de chances que sh pointe sur autre chose
qu'un dérivé Bourne Shell... même sur les BSD, il
semble que ce soit le cas.
#!/bin/sh if [ "toto" == "toto" ]; then echo "ça marche 1" fi if [ "toto" = "toto" ]; then echo "ça marche 2" fi #FDFLa première est rejetée par le Ash Shell mais admise par Bash, ou encore :
#!/bin/sh COUNT=1 echo $((COUNT+1)) # FDF
Oui, j'aurais dû dire "un script en sh est 100% compatible sur du bash"Citation
Mushroom
Non, bash n'est pas 100% compatible sh. Enfin si,
dans le sens sh -> bash, mais l'inverse (bash -> sh) n'est pas vrai.
=> Ni même en pur Bourne ShellCitation
Mushroom
#!/bin/sh COUNT=1 echo $((COUNT+1)) # FDFqui ne passe pas en Ash Shell.
Euh, oui c'est vrai puisque sur Linux, tu bosses sans le savoir en bash donc t'es pas certain que ce que t'écrives soit 100% compatible shCitation
Mushroom
Donc oui, une
syntaxe Bourne Shell passera partout, mais quelque
chose qui passe lancé en sh sur un système ne
passera pas forcément sur un autre.
Ben je connais pas (et ça me manque...)Citation
Mushroom
Mais bon, si on veut vraiment faire du portable,
àmha on scripte en autre chose qu'en shell
(python, perl,...).