Vous n'êtes pas identifié(e).
En-tête et commentaires:
Rien de plus difficile de reprendre un script, soit longtemps après sa rédaction, soit le travail d'un autre et de ne pas savoir rapidement le but du script ou certaines lignes de code.
Pour cela un en-tête est fort utile, même sur des scripts apparemment court et simple.
Un exemple:
Pour les commentaires, leur but n'est pas n'expliquer chaque élément du code mais d'en expliquer, synthétiquement l'objectif:
Pour les commentaires longs, j'ai vu une syntaxe que j'apprécie:
Protection des variables:
Lors de l'utilisation de variables, il est important de penser à les encadrer de "" afin que son contenu (caractères blancs notamment) n'en perturbe pas l'évalution:
On voit ici que l'évaluation d'une variable non protégée contenant des espaces échoue.
Invocation de commandes:
Lors de l'invocation d'une commande dont le résultat est destiné à être affecté à une variable par exemple, on utilisera préférentiellement la syntaxe $(commande) au lieu de `commande`:
A vous la suite si vous le voulez bien, sinon je continuerai plus tard au gré de mes lectures et expérimentations.
Je serais notamment intéressé qu'un adepte des scripts shell partage ses connaissances des bonnes pratiques dans le cadre de la rédaction de fonctions.
Dernière modification par sogal (19-02-2015 09:30:37)
Hors ligne
captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.
Hors ligne
Remarque : Je ne sais pas si les retours à la ligne sont correctement gérés… à tester.
Lorsqu'on utilise while read, on peut préciser un délimiteur, le caractère nul est celui qu'il faut choisir pour passer des noms de fichiers.
Il faut alors préciser au programme qui fournit les noms de fichiers d'utiliser le caractère nul comme séparateur d'enregistrement. Avec find
on utilisera -print0
remarque: Je ne suis pas sûr de la syntaxe : read -d "\000"
Hors ligne
À propos du « for file in $(find ~/telechargement/ -type f -name *.avi) »
C'est une mauvaise pratique. Pourquoi ? Parce qu'un nom de fichier (et a fortiori un chemin) peut contenir des espaces, et même des retours à la ligne.
On préférera dans ce cas une syntaxe avec un -exec / -execdir.
De même, le « while read i; do … done » ne devrait pas être utilisé pour lire des noms de fichiers, pour les même raisons.
Merci pour ce premier retour, si tu as l'occasion de développer un brin ces 2 points avec un petit exemple de syntaxe correcte, ce serait génial
Hors ligne
captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.
Hors ligne
Dans cet extrait, la variable $f prend sa valeur dans "for FILE", dans "-type F" ? ou dans l'ensemble de ce qu'il y a entre parenthèses ?
-type désigne quoi exactement ? le genre de fichier utilisé (avi, mp3, jpg ou autre)
ça serait peut-être un peu chi* pour toi, mais est-ce que tu voudrais bien me détailler la signification de chaque éléments ?
ce que je comprends dans les parenthèses : trouve dans Téléchargements des fichiers de -type/nom *.avi ( ça ne fonctionnerait pas si on supprime un des "-type" "f" "-name"? )
C'est un peu dur pour moi, je n'ai pas de mentor Linux ! Mon seul mentor (de taille !) c'est internet
Je suis débutant, si à la lecture d'un de mes postes vous avez des suggestions, des liens à me donner ou n'importe quoi qui puisse me faire avancer, n'hésitez pas ! !
Merci
Hors ligne
Note, la correspondance de la variable « file » utilisé en entrée de boucle avec
celle utilisée dans la boucle, ça ne peut pas marcher autrement.
Aussi, il faut utiliser des apostrophes simples pour protéger le motif shell '*.avi',
sinon c'est le shell qui va l'interpréter et on veut que soit find qui s'en charge.
(Enfin, ça dépend s'il y a des fichiers correspondant au motif *.avi dans le répertoire
courant (find recherche dans une arborescence, alors que le motif shell *.avi ne
correspond qu'aux fichiers du répertoires courant). Ça dépend aussi de ce que vaut
l'option du shell nullglob , positionné dans bash avec la commande interne « shopt ».)
Sinon pour la signification des options de find :
-type f: trouver les fichiers normaux
-name '*.avi' : dont le nom correspond au motif shell '*.avi'
On peut préciser d'autres types de fichiers à find avec l'option -type. Une liste non exhaustive :
d : répertoire
l : lien symbolique
s : socket
Je te laisse regarder toi même la page manuelle de find (qui a été traduite en français) avec la commande :
Note, la commande man est la commande que tu devrais utiliser tout le temps
pour découvrir l'usage des commandes. Un bon réflexe est de consulter les man
de toutes les commandes que tu utilises
Pour terminer, sans le -type f, find pourrait trouver aussi des fichiers qui ne sont
pas normaux, c'est à dire des répertoires, des liens symboliques, des fichiers de
type périphériques, etc…
Après tout dépend de ce que tu veux faire. Je trouve que c'est une bonne idée d'être
le plus précis possible. Enfin, comme l'enfer est pavé de bonnes intentions, la précision
se retourne quelques fois contre nous, il faut alors appliqué le précepte qui veut que le
mieux est l'ennemi du bien
Dernière modification par enicar (12-03-2015 17:01:10)
Hors ligne
Vous cherchez une alternative à Google?
Essayez StartPage !
Hors ligne
En Bash on préfère les variables en majuscule.
J'ai l'habitude d'utiliser des variables en majuscules pour les variables globales à un script et pour
les variables à exporter dans l'environnement (en bash, il est possible d'exporter des variables en minuscules,
mais je trouve que c'est une très mauvaise pratique).
Autrement, pour une variable qui est local à une boucle for ou à une fonction,
une variable en minuscule est préférable, amha.
Ce n'est peut être pas la pratique recommandée par les puristes de bash, mais bon…
Hors ligne
J'ai l'habitude d'utiliser des variables en majuscules pour les variables globales à un script et pour
les variables à exporter dans l'environnement (en bash, il est possible d'exporter des variables en minuscules,
mais je trouve que c'est une très mauvaise pratique).
Autrement, pour une variable qui est local à une boucle for ou à une fonction,
une variable en minuscule est préférable, amha.
Je m’appelle vv222 et je soutiens cette pratique.
https://paste.debian-facile.org//view/36e0052c
Hors ligne
Hors ligne
saque eud dun (patois chtimi : fonce dedans)
Hors ligne
nullglob est sur off... Peut-être à préciser de ma part que ma Wheezy est upgradée de Handy-Linux, ce qui pourrait éventuellement expliquer certaines bizarreries de ma config par défaut !
Tu veux bien m'aider à configurer ça ?
Pour le reste... Je vais de lien en lien, j'ai vite fait de me retrouver avc une dizaine d'onglets par fenêtre : c'est pas tout facilement simple
Là j'ai 15 jrs de vacances, je vais essayer d'avancer...
Je suis débutant, si à la lecture d'un de mes postes vous avez des suggestions, des liens à me donner ou n'importe quoi qui puisse me faire avancer, n'hésitez pas ! !
Merci
Hors ligne