Je ne connais pas 4chan mais quelques conseils...
- pourquoi bash ? Ton script a l'air d'être tout à fait "standard" et de n'utiliser aucun "bashism" (ce qui est plutôt bien, c'est portable), dans ce cas tu mets en première ligne /bin/sh
/bin/sh est un "pseudo-shell" ça dit simplement à ton Linux d'utiliser son shell par défaut qui n'est
PAS bash pour Ubuntu, mais
dash, lequel est bien
5 à 10 fois plus rapide !..
- toutes tes variables sont "nues". Ca c'est une très mauvaise habitude, et on peut faire planter facilement ton programme ! Par exemple, tu prévoies qu'on puisse introduire un nom de répertoire, eh bien si l'utilisateur a la mauvaise idée de mettre un nom de répertoire avec un espace (après tout il nomme ses répertoires comme il le veut !) ton script va planter à plusieurs endroits.
Par exemple:
them mkdir $dir
mal, mal, mal, mal !...
Démonstration:
dir="Mon répertoire"
mkdir $dir
ls -l
... résultat:
drwxrwxr-x 2 zakhar zakhar 40 août 22 22:10 Mon
drwxrwxr-x 2 zakhar zakhar 40 août 22 22:10 répertoire
Ce que tu voulais en fait c'est:
mkdir "${dir}"
Là j'ai écrit la forme totale des variables, mais ce qui est important en l'occurrence ce sont les guillemets. Sans ça, aïe aïe les espaces et caractères "spéciaux". Les accolades sont superflues lorsque tu utilises une variable toute seule comme ça, mais je trouve que ça "unifie" les choses et ça évite de les oublier le jour où tu en as besoin. D'un seul coup d'oeil tu vois bien ainsi où sont les variables.
- Homogénéité: pourquoi utiliser les deux formes : `commande` et $(commande), comme dans :
mv -f `echo $url | cut -d '/' -f6` etape1.txt;
cat etape1.txt | sed 's/</\n/g' | grep images | grep fileThumb | cut -d '"' -f4 > etape2.txt;
for line in $(cat etape2.txt);
(première forme sur la première ligne, et deuxième sur la dernière).
La forme avec $() est la plus "moderne", elle de plus des avantages, notamment quand on veut les imbriquer. Je te suggère de t'en tenir à cette forme là, et d'homogénéiser ainsi.
mv -f $(echo "${url}" | cut -d '/' -f6) etape1.txt;
cat etape1.txt | sed 's/</\n/g' | grep images | grep fileThumb | cut -d '"' -f4 > etape2.txt;
for line in $(cat etape2.txt);
-
Useless Use of Cat Award
cat etape1.txt | sed 's/</\n/g'
==>
sed 's/</\n/g' etape1.txt
Et tu peux aussi fusionner le grep qui suit :
grep images | grep fileThumb
grep 'images.*fileThumb\|fileThumb.*images'
(parce que je ne sais pas s'il y a un ordre déterminé entre image et fileThumb, si oui, tu peux garder l'alternative correcte).
Cette deuxième version est plus rapide:
- une seule invocation de grep
- un pipe de moins (donc 2 file handles + open/close en moins)
Par contre, surtout si l'ordre des deux mots est quelconque, elle est nettement moins lisible et maintenable... donc c'est à toi de voir !
L'idéal cependant, si tu es un maître 3ème dans en sed, c'est de tout faire dans ta commande sed, qui est tout à fait capable de te trouver des patterns comme un grep. Je te laisse chercher, c'est un bon exercice ! 😛
- Dernier point... et non des moindres.... il y a 0 commentaire !.. :rolleyes: :rolleyes: :rolleyes:
Même pour toi, si tu relis quelques temps plus tard, les commentaires sont
essentiels !...
A minima, tu mets une entête qui explique ce que le script est sensé faire.
J'ai aussi remarqué qu'en mettant des commentaires détaillés, j'arrivais à corriger bien des erreurs avant qu'elles ne se manifestent, c'est donc une bonne habitude à prendre.