Scripts bash pour faire des trucs [SUJET UNIQUE ?]

Scripts bash pour faire des trucs [SUJET UNIQUE ?] - Multimédia - Linux et OS Alternatifs

Marsh Posté le 06-11-2002 à 14:17:03    

Je pensais à un truc : si on mettait dans un sujet des scripts bash qu'on utilise plus ou moins fréquemment, avec leur utilité, et quelques commentaires sur leur fonctionnement.
Le but est double :
1) Quand quelqu'un cherche à faire quelque chose de précis, peut-être pourra-t-il trouver quelque chose qui lui va bien
2) Amélioration des scripts proposés, astuces, autre méthode, etc.
 
Enfin, bref, ce genre de trucs, quoi ...

Reply

Marsh Posté le 06-11-2002 à 14:17:03   

Reply

Marsh Posté le 06-11-2002 à 14:19:07    

Reply

Marsh Posté le 06-11-2002 à 14:26:56    

Je commence avec un script qui me permet de faire des photocopies.
 
Ça marche comme ça :
 
Par défaut, fais un scan en 600 dpi en 2 couleurs (N&B)
~$ photocop
 
Scanne en 150 dpi, comme le mode (N&B, Gris ou Couleur) n'est pas précisé, prend par défaut le mode Gris.
~$ photocop 150
 
Scanne en 300 dpi, en couleur.
~$ photocop c 300
 
Scanne en 75 dpi, en niveaux de gris.
~$ photocop 75 G
 
 

Code :
  1. #!/bin/sh
  2. # set -x
  3. # b/B/2, g/G, c/C pour le mode, binaire par défaut si la résolution est
  4. #    de 300 ou 600, Gris sinon
  5. # 75/7, 150/15/1, 300/3, 600/6 pour la résolution, 150 par défaut
  6. #    si le mode est Gray ou Couleur, 600 sinon
  7. RESOL=600
  8. MODE=B
  9. # Signale si il y a déjà eu un paramètre de Mode ou de Résolution
  10. PARAMM=
  11. PARAMR=
  12. while [ $1 ] ; do
  13.     case $1 in
  14.     b|B|2|bin|BIN|Bin|Binaire)
  15.      MODE=B;
  16.      PARAMM=1;
  17.      if [ ! $PARAMR ] ; then
  18.          RESOL=600;
  19.      fi
  20.      ;;
  21.     g|G|Gray|Gris|gray|gris)
  22.      MODE=G;
  23.      PARAMM=1;
  24.      if [ ! $PARAMR ] ; then
  25.          RESOL=150;
  26.      fi
  27.      ;;
  28.     c|C|Col|COL|col|coul|couleur|Couleur|Coul|Color|color)
  29.      MODE=C;
  30.      PARAMM=1;
  31.      if [ ! $PARAMR ] ; then
  32.          RESOL=150;
  33.      fi
  34.      ;;
  35.     75|7)
  36.      RESOL=75;
  37.      PARAMR=1;
  38.      if [ ! $PARAMM ] ; then
  39.          MODE=G;
  40.      fi
  41.      ;;
  42.     150|15|1)
  43.      RESOL=150;
  44.      PARAMR=1;
  45.      if [ ! $PARAMM ] ; then
  46.          MODE=G;
  47.      fi
  48.      ;;
  49.     300|30|3)
  50.      RESOL=300;
  51.      PARAMR=1;
  52.      if [ ! $PARAMM ] ; then
  53.          MODE=B;
  54.      fi
  55.      ;;
  56.     600|60|6)
  57.      RESOL=600;
  58.      PARAMR=1;
  59.      if [ ! $PARAMM ] ; then
  60.          MODE=B;
  61.      fi
  62.      ;;
  63.     *)
  64.         echo "L'ordre des paramètres est indifférent."
  65.         echo "Si aucun paramètre n'est passé, on est en 600 binaire."
  66.         echo "Les paramètres possibles sont : "
  67.         echo "  c, b, et g pour le mode"
  68.         echo "  75, 150, 300 et 600 pour la résolution"
  69.         echo "Note : le mode par défaut fait de très bonnes photocopies"
  70.         echo "de documents en noir et blanc, y compris de journaux."
  71.         exit
  72.         ;;
  73.     esac
  74. # shift, ça sert à décaler les paramètres (voir dans le man bash)
  75. # $0 prend la valeur de $1, $1 celle de $2, ...
  76. # Par défaut shift, c'est pareil que shift 1.
  77.     shift
  78. done
  79. scanimage --mode $MODE --resolution $RESOL --quick-format A4 | pnmtops | lpr -Php1100

Reply

Marsh Posté le 06-11-2002 à 14:27:55    

R@NNIS a écrit a écrit :

http://www.tldp.org/LDP/abs/html/
 
 



Mais dans la vraie vie, ça se passe comment ?
 
Ya des scripts sympas, mais c'est bien d'avoir des explications en français, des fois, non ?


Message édité par Jak le 06-11-2002 à 14:30:51
Reply

Marsh Posté le 06-11-2002 à 14:28:11    

très très bonne initiative... Merci  :jap:  :jap:  :jap:

Reply

Marsh Posté le 06-11-2002 à 14:28:15    

sympa ton lien!

Reply

Marsh Posté le 06-11-2002 à 21:09:06    

Jak a écrit a écrit :

Je pensais à un truc : si on mettait dans un sujet des scripts bash qu'on utilise plus ou moins fréquemment, avec leur utilité, et quelques commentaires sur leur fonctionnement.
Le but est double :
1) Quand quelqu'un cherche à faire quelque chose de précis, peut-être pourra-t-il trouver quelque chose qui lui va bien
2) Amélioration des scripts proposés, astuces, autre méthode, etc.
 
Enfin, bref, ce genre de trucs, quoi ...




 
tout bon script contient un entete explicant tout ca et pleins de commentaires en particulier pour les fonctions dans les scripts...


---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

Marsh Posté le 06-11-2002 à 22:25:28    

kuroineko a écrit a écrit :

 
 
tout bon script contient un entete explicant tout ca et pleins de commentaires en particulier pour les fonctions dans les scripts...



Le but c'est de metter en commun des petits trucs qui nous ont facilité la vie, histoire que l'on puisse s'inspirer de ce que chacun a fait pour résoudre des problèmes. Là, par exemple, c'est en grande partie une façon de gérer les paramètres.
Le script de Jotenakis, dans le sujet Codage Video, est bien pour les couleurs, et les calculs, enfin, bref, ...

Reply

Marsh Posté le 10-12-2002 à 19:15:09    

j'aime bien ce sujet, alors UP  
 
je vous propose les miens : http://mjules.free.fr/script.html
 
A+


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 25-07-2003 à 19:19:21    

Merci de ton initiative Jak  :)  :jap:  :jap:  
 
Je cherchais justement un script pour faire des photocopie :D
 
Dommage que ce tomic n'ai pas plus de succès ...

Reply

Marsh Posté le 25-07-2003 à 19:19:21   

Reply

Marsh Posté le 07-01-2004 à 18:11:09    

Un vieux topic fort utile ! Je faisais une recherche sur le forum pour faire une chose basic : j'ai un répertoire qui contient plein de .zip et je voulais les dézipper à la chaîne, en créant un répertoire pour chaque fichier correspondant au nom du ficheir avant son extension. Ca donne :
 
1ère version :
 

Code :
  1. for f in *.zip; do
  2. f2=`basename $f .zip`
  3. mkdir $f2
  4. unzip -x $f -d $f2
  5. done


 
J'ai voulu l'améliorer afin de gérer les espaces ds les noms de fichier, j'ai d'abord fait un essai :
 


$ ls
tutors 2.zip
[~/tmp/tmp]$ basename tutors\ 2.zip .zip | sed 's/ /\\ /g'
tutors\ 2
$


 
Ca fait donc bien ce que je veux, mais lorsque je l'intégre ds mon script :
 

Code :
  1. for f in *.zip; do
  2. f2=`basename $f .zip | sed 's/ /\\ /g'`
  3. mkdir $f2
  4. unzip -x $f -d $f2
  5. done


 
Mais voilà ce qu'il me dit lorsque je souhaite l'appliquer :
 
 


$ ./apply  
basename: too many arguments
Try `basename --help' for more information.
mkdir: too few arguments
Try `mkdir --help' for more information.
error:  must specify directory to which to extract with -d option
$


 
Une idée ?


Message édité par Evadream -jbd- le 07-01-2004 à 18:43:49
Reply

Marsh Posté le 07-01-2004 à 18:47:28    

quelques topics existent deja sur ce sujet des espaces, et je suis pas sur qu'il y ait eu une solution de trouvée à chaque fois :(
 
EDIt : rajoute set -x au début de ton script ;)


Message édité par bobuse le 07-01-2004 à 18:48:28
Reply

Marsh Posté le 07-01-2004 à 18:52:15    

Ha au fait, pour fournir de la matiere au topic, voici une banque de scripts pas mal :)
http://www.trustonme.net/scripts/index.php
En page 2, il y a un de moi, qui permet de faire de la traduction Français<->Anglais à l'aide de google ;)


Message édité par bobuse le 07-01-2004 à 18:52:25
Reply

Marsh Posté le 07-01-2004 à 18:55:49    

merci pour le set -x, je vais voir !

Reply

Marsh Posté le 07-01-2004 à 19:00:01    

Reply

Marsh Posté le 07-01-2004 à 19:42:20    

Un petit script pour ceux qui ont comme moi un modem USB speedtouch
La première commande est utile sur ma fedora pour virer ce *$!§ù$ de module speedtch
 
A lancer en root (ou faire un petit prog en C qui le lance)
Fais de jolis [ OK ] pour chaque commande
 
Tous les commentaires / critiques / caillous / dons sont les bienvenus :D
 

Code :
  1. # !/bin/bash
  2. . /etc/rc.d/init.d/functions
  3. FIRMWARE="/usr/data/alcaudsl.sys"
  4. echo -n "Dechargement des modules inutiles"
  5. /sbin/modprobe -r speedtch
  6. RETVAL=$?
  7. if [ "$RETVAL" -eq "0" ]; then
  8.   echo_success
  9. else
  10.   echo_failure
  11. fi
  12. echo
  13. echo -n "Suppression des fichiers de verrouillage"
  14. rm -f /var/run/pppoa3-modem1.pid
  15. RETVAL=$?
  16. if [ "$RETVAL" -eq "0" ]; then
  17.   echo_success
  18. else
  19.   echo_failure
  20. fi
  21. echo
  22. echo -n "Suppression des anciennes instances pppoa3"
  23. ps wax | grep pppoa3 | grep -v grep | cut -b 1-5 | xargs -i kill -KILL {}
  24. RETVAL=$?
  25. if [ "$RETVAL" -eq "0" ]; then
  26.   echo_success
  27. else
  28.   echo_failure
  29. fi
  30. echo
  31. echo -n "Chargement du firmware du modem USB"
  32. /usr/local/sbin/modem_run -v 2 -s -f $FIRMWARE 
  33. RETVAL=$?
  34. if [ "$RETVAL" -eq "0" ]; then
  35.   echo_success
  36. else
  37.   echo_failure
  38. fi
  39. echo
  40. echo -n "Lancement de la connexion ADSL"
  41. /usr/sbin/pppd call adsl
  42. RETVAL=$?
  43. if [ "$RETVAL" -eq "0" ]; then
  44.   echo_success
  45. else
  46.   echo_failure
  47.   echo
  48. fi
  49. echo

Reply

Marsh Posté le 07-01-2004 à 19:42:59    

Et hop :)
 


#/bin/sh
 
set -x
 
for f in *.zip; do
f2=`basename "$f" .zip`
mkdir "$f2"
unzip -x "$f" -d "$f2"
done

Reply

Marsh Posté le 07-01-2004 à 20:24:14    

Intéressant topic.
 
Pour agrémenter les scripts de boîtes de dialogue, il y a KDialog sous KDE 3.2 qui semble vraiment simple d'utilisation : http://developer.kde.org/documenta [...] HELL_INTRO

Reply

Marsh Posté le 07-01-2004 à 20:43:23    

je cherche un script SIMPLE de ogg vers mp3 ...
je n'arrive pas à le faire car je n'arrive pas à gerer les noms avec des espaces pour un for :(

Reply

Marsh Posté le 07-01-2004 à 20:45:51    

Bonne idée de topic !
Ca va me permettre d'apprendre des trucs en bash  :D
 
Ma maigre contribution : un script qui me charge les fichiers mp3/ogg qui ont un nom contenant la chaîne de caractères passée en paramètre.
 

Code :
  1. #! /bin/sh
  2. # Find song files in some directories, and send to XMMS filenames that contain the given param
  3. # Building file list
  4. find /medias/Musique/ -type f -iname "*$1*.mp3" >  /tmp/.searchResults.temp
  5. find /medias/Musique/ -type f -iname "*$1*.ogg" >> /tmp/.searchResults.temp
  6. find /medias/Trucs/ -type f -iname "*$1*.mp3"   >> /tmp/.searchResults.temp
  7. find /medias/Trucs/ -type f -iname "*$1*.ogg"   >> /tmp/.searchResults.temp
  8. # Rewriting all space characters
  9. perl -i'*.bak' -pe 's/ /\\ /g' /tmp/.searchResults.temp
  10. # Sending files list to XMMS
  11. cat /tmp/.searchResults.temp | xargs xmms
  12. # Removing temporaly files
  13. rm -f /tmp/.searchResults.temp /tmp/.searchResults.temp.bak


 
J'en profite pour demander si quelqu'un sait comment récupérer la sortie de find dans un tableau. Ca permettrait au script de ne pas se vautrer (et de ne pas avoir besoin de fichiers temporaires au passage) quand un des noms de fichiers contient une single quote...
 
 
Au fait, pour ceux que ça intéresse, un vrai soft fait déjà ça pour xmms, ça s'appelle xmms-qbble. Mais comme personnellement, j'aime pas trop qt...

Reply

Marsh Posté le 07-01-2004 à 20:55:32    

GUG a écrit :

je cherche un script SIMPLE de ogg vers mp3 ...
je n'arrive pas à le faire car je n'arrive pas à gerer les noms avec des espaces pour un for :(


 
Je suis débutant moi aussi en script, et j'ai résolu mon problème d'espace dans les noms en encadrant mes noms de fichier par des " "


for f in *.zip; do
f2=`basename "$f" .zip`
mkdir "$f2"
unzip -x "$f" -d "$f2"
done  


 
Ca prend chaque zip dans un répertoire, ca crée un répertoire avec leé nom du zip (avec les espaces et sans l'extension .zip), et dézip le zip dedans :)
 
Sinon, y'a ca : http://www.trustonme.net/scripts/d [...] g321ogg.sh
 
@++


Message édité par Evadream -jbd- le 07-01-2004 à 20:56:27
Reply

Marsh Posté le 07-01-2004 à 20:58:23    

je me rappele plus trop ce que j'avais fait mais je ne crois pas que les " " resoude ce probleme ...
 
en fait je passe en argument : /mnt/ftp/path/rep/ ou /mnt/ftp/path/rep/*
 
et convertir tout les ogg vers des mp3 ... et je galerais sur la boucle for ...
awk roxor en tout cas :D
 
Je vais m'y remettre tiens mais demain [:ddr555]


Message édité par GUG le 07-01-2004 à 21:00:20
Reply

Marsh Posté le 07-01-2004 à 20:59:37    

Pour le scrip tout fait, certe mais ca ne correspond pas vraiment à ce que je veux (meme en changeant un peu), en plus il est complexe à mon niveau et il me manquait plus que ca pour le faire marcher ...

Reply

Marsh Posté le 07-01-2004 à 22:14:00    

Faudrait faire un petit système de "requêtes" pour des scripts, ce serai sympa pour les non programmeurs et/ou les noob

Reply

Marsh Posté le 07-01-2004 à 23:04:59    

je voudrai savoir si on peut executer plusieurs commande simultanément ? Et si oui comment ?


---------------
"Deux chose sont infinies, l'univers et la sotise humaine. Mais je ne suis pas sûr de ce j'affirme quant à l'univers." Albert Einstein
Reply

Marsh Posté le 08-01-2004 à 01:52:21    

Ben oui : commande_1&; commande_2& [:airforceone]

Reply

Marsh Posté le 08-01-2004 à 09:34:38    

black_lord a écrit :

Faudrait faire un petit système de "requêtes" pour des scripts, ce serai sympa pour les non programmeurs et/ou les noob


ben il suffit de mettre tes scripts dans la banque à script de trustonme et de faire les recherche la-bas [:spamafote]
 
Le problème avec les scripts c'est sont souvent très spécifique à un problème particulier :/ , et peuvent difficillement être réutilisé tel quel ... pensez donc à la lisibilité de vos scripts ;)

Reply

Marsh Posté le 08-01-2004 à 12:58:07    

matafan a écrit :

Ben oui : commande_1&; commande_2& [:airforceone]


:jap:


---------------
"Deux chose sont infinies, l'univers et la sotise humaine. Mais je ne suis pas sûr de ce j'affirme quant à l'univers." Albert Einstein
Reply

Marsh Posté le 08-01-2004 à 13:42:15    

Script de conversion de tous les .ogg du répertoire courant vers des mp3. (baladeur inside :D), et pas de problèmes avec les espaces.
 
lame et ogg123 doivent être dans le PATH
 


#!/bin/sh
 
for i in `ls *.ogg`
do
name=`basename $i| sed -s "s/\.ogg//g"`
    ogg123 $i -d wav -f - | lame -q 9 - - > $name.mp3
done


Message édité par void_ppc le 08-01-2004 à 13:42:40
Reply

Marsh Posté le 08-01-2004 à 14:53:40    

Par exemple si je fait  
sh scritp.sh /le/rep/
ca pose probleme avec les espaces

Code :
  1. #!/bin/sh
  2. for i in `ls $1`
  3.    do
  4.    echo "$i"
  5.    done;


Message édité par GUG le 08-01-2004 à 14:53:50
Reply

Marsh Posté le 08-01-2004 à 15:31:16    

Pour les script de quelques lignes, il est aussi bien de faire des fonctions bash et de les placer dans le .bashrc.
 
exemple :

Code :
  1. # Compress
  2. rf+ () {
  3.   local fic
  4.   if [ $# = 1 ]; then
  5.     if [ -d "$1" ]; then
  6.       tar cvzf "${1%/}".tgz "$1" && rm -rf "$1"
  7.     else
  8.       gzip "$1"
  9.     fi
  10.   else
  11.   case "$1" in
  12.     *.tgz|*.tar.gz) tar cvzf "$@" ;;
  13.     *.tar) tar cvf "$@" ;;
  14.     *.tar.bz2|*.tz2)
  15.       fic="$1"; shift; tar cv "$@" | bzip2 > "$fic" ;;
  16.     *.gz) gunzip "$@" ;;
  17.     *.bz2) bunzip2 "$@" ;;
  18.     *.tar.z|*.tar.Z)
  19.       fic="$1"; shift; tar cv "$@" | compress > "$fic" ;;
  20.     *.z|*.Z) uncompress "$@" ;;
  21.     *.zip|*.ZIP) zip -r "$@" ;;
  22.     *.jar|*.jar) jar cvf "$@" ;;
  23.     *.rar) rar -rr a "$@" ;;
  24.     *) echo "unknow format : $1" ;;
  25.   esac
  26.   fi
  27. }
  28. # Uncompress
  29. [...]


 
Quant à faire un topic qui regrouperait plein de fonctions et script utiles, le mieux serait d'héberger les script ailleurs sinon ça risque d'être assez peu lisible.
Pour les scripts, il bien d'indiquer ce que ça fait dans le script (en commentaire ou avec une fonction usage). ex:
 

Code :
  1. #! /bin/bash
  2. # Copyright (C) 2000 ... (GPL)
  3. VERSION=2.0
  4. prog=`basename $0`
  5. version () {
  6. cat << EOF
  7. $prog $VERSION
  8. EOF
  9. exit
  10. }
  11. usage() {
  12. cat << EOF >&2
  13. Usage: $prog [-n] [dir(s)]
  14.   Search for files which are identical.
  15.   Use a diff command on the files which have the same size.
  16.   The files can have different names.
  17.   Don't print hard links.
  18.   Options:
  19.    -n  : Search only for files which have the same names even if they
  20.          aren't identical
  21.   All arguments after a "--" are passed to find.
  22. EOF
  23. exit 0
  24. }
  25. [ "$1" == "--help" ] && usage
  26. [ "$1" == "--version" ] && version
  27. while getopts ":nvh" i; do
  28.   case "$i" in
  29.     h*) usage ;;
  30.     v*) version ;;
  31.     [...]
  32.     *) error "Invalid option: $OPTARG. Try $prog -h" ;;
  33.   esac
  34. done
  35. [...]


Reply

Marsh Posté le 09-01-2004 à 12:17:00    

drapal

Reply

Marsh Posté le 09-01-2004 à 15:22:50    

Voilà un petit script qui redimmensionne toutes les images d'un dossier.
 
Utilisation
 

  • Enregistrer les quelques lignes suivantes à l'aide d'un éditeur.
  • chmod 755 images.sh
  • cd /repertoire/des/photos
  • sh images.sh *.jpg (ou n'importe quel format supporté)


N.B. La taille par défaut est le 1024x768, à vous de changer cela à votre guise.
 

Code :
  1. #!/bin/sh
  2. for f in $* ;do
  3. convert -size 1024x768 $f -resize 1024x768 s_$f
  4. echo "Redimensionnement de la photo "$f
  5. done
  6. echo "Le redimensionnement des images s'est terminé avec succès"
  7. # fin du script

Reply

Marsh Posté le 09-01-2004 à 15:32:04    

julouze > A quoi sert ton "chmod 755 images.sh" si tu lance le script avec sh ;) ?

Reply

Marsh Posté le 10-01-2004 à 00:28:14    

Je ne sais pas en fait ! :lol: C'est juste un copier/coller, j'étais encore jeune et innocent quand je l'ai fait !

Reply

Marsh Posté le 10-01-2004 à 10:00:31    

Faire un script pour une commande qui tiens en une ligne ça n'a pas de sens. Tu le mets dans un fichier memo ou si tu t'en sers souvent, tu fais un alias.
En plus c'est boggué, il ne faut JAMAIS utiliser $* quand les fichiers peuvent contenir des espaces ou autre :

Code :
  1. for f in "$@"; do
  2. ... "$f" ... "$f"


Reply

Marsh Posté le 10-01-2004 à 14:18:07    

tu fais comment pour les espaces alors [:ddr555]

Reply

Marsh Posté le 20-02-2004 à 11:33:49    

petit up pour un topic de qualitäy

Reply

Marsh Posté le 20-02-2004 à 12:14:28    

drapal  [:ekxon]

Reply

Marsh Posté le 20-02-2004 à 12:17:49    

pour que ce topic soit reelement bien faudrait penser a faire un ptit index en premiere page pour des recherches plus facile :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed