#1 Le 22/02/2010, à 15:43
- wido
[bash]Script commande: option usage [résolu]
Bonjour,
Je recherche des exemples de script ce basant sur cette exemple:
$sh script
Version 0.01
Usage: script --wallpaper [Dossier] #analyse la totalité du dossier et crée un fichier database (.db)
--database [Fichier] #Lis le fichier .db pour afficher une image avec feh.
--autre option à définir par la suite
le problème que j'ai c'est pour intégrer la partie option:
sh script --wallpaper /mondossier/images/
sh script --database /mondossier/images/images.db
comment je crée ça?
Dernière modification par wido (Le 24/02/2010, à 23:14)
Hors ligne
#2 Le 22/02/2010, à 16:39
- Totor
Re : [bash]Script commande: option usage [résolu]
Bonjour,
Je suis pas certain d'avoir compris ton besoin.
Je suppose que tu souhaites trouver une solution afin de déterminer si les options --wallpaper ou --database ont été positionnées.
Si c'est le cas, voilà comment je ferais :
while getopts :-: option
do
case ${option} in
-) case $OPTARG in
-wallpaper) ...;;
-database) ... ;;
*) ...;;
esac;;
:) echo "Argument manquant pour l'option ${OPTARG}.";;
?) echo "Option non valide : ${OPTARG}.";;
esac
done
shift $((OPTIND-1))
Note : j'ai pas testé
-- Lucid Lynx --
Hors ligne
#3 Le 22/02/2010, à 17:15
- wido
Re : [bash]Script commande: option usage [résolu]
j'avais trouvé dans le même style:
while getopts "vh-:" opt ; do
if [ $opt = "-" ] ; then
case $OPTARG in
help ) opt="h" ;;
version ) opt="v" ;;
* ) echo "option longue inconnue..." ;;
esac
fi
case $opt in
h ) echo "help...."
print_info"
;;
v ) echo "version..."
echo "$VERSION"
;;
? ) echo "option inconnue"
;;
esac
done
Hors ligne
#4 Le 22/02/2010, à 17:29
- sputnick
Re : [bash]Script commande: option usage [résolu]
Pour les options longue je source ce script ^^
http://sputnick-area.net/ftp/downloads/getopts_long.sh
http://sputnick-area.net/ftp/downloads/getopts_long_example.sh
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#5 Le 22/02/2010, à 17:57
- wido
Re : [bash]Script commande: option usage [résolu]
Merci à vous deux, j'ai déjà du mal à coder, les exemples que tu donnes sputnick ne sont pas pour moi, beaucoup trop compliqué
je passerai le sujet en résolu quand je n'aurais plus de question, en deux trois mots, le script permettra d'analyser un dossier image pour qu'il affiche uniquement les images aux résolutions de l'écran comme ça on n'a pas de pixel qui se balade.
Dernière modification par wido (Le 22/02/2010, à 17:59)
Hors ligne
#6 Le 24/02/2010, à 23:13
- wido
Re : [bash]Script commande: option usage [résolu]
Voici mon script:
#!/bin/bash
#set -x
AUTEUR="Wido <widomaker2k7 gmail.com>"
VERSION="0.1"
LICENCE="GPL"
file=$2
. ./swall.conf # Lecture du fichier de configuration
# # # # # # # # # # # # # # # # #
# __Couleurs__
# # # # # # # # # # # # # # # # #
msgR () { # rouge
local mesg=$1; shift
printf "${_RG}==>${_FN} ${_BN}${mesg}${_FN}\n" "$@" >&2
}
msgV () { # vert
local mesg=$1; shift
printf "${_VR}==>${_FN} ${_BN}${mesg}${_FN}\n" "$@" >&2
}
msgJ () { # jaune
local mesg=$1; shift
printf "${_JN}==>${_FN} ${_BN}${mesg}${_FN}\n" "$@" >&2
}
msgB () { # bleu
local mesg=$1; shift
printf "${_BL}==>${_FN} ${_BN}${mesg}${_FN}\n" "$@" >&2
}
# Analyse le dossier image pour en sortir un fichier .db
wallpaper() {
if [ -f "$file" ]; then
echo "C'est un fichier"
elif [ -d "$file" ]; then
echo "c'est un dossier"
create_database
else
echo "le fichier ou dossier n'existe pas"
exit 1
fi
}
lockfile() {
if [ -e $LOCKFILE ]
then
echo "Actuellement $0 tourne."
exit 1
else
echo $! > $LOCKFILE
fi
}
resetlockfile() {
if [ -e $LOCKFILE ]
then
# Read PID from lock file
read MYAPP_PID < $LOCKFILE
# Kill MyApplication by sending a SIGTERM signal
$(kill $MYAPP_PID &> /dev/null)
echo "MyApplication stopped."
# Remove obsolete lock file and exit
rm $LOCKFILE
else
echo "MyApplication is not running."
fi
}
dependance() {
if [ -x "/usr/bin/identify" ]; then
# Vérification de imagemagick
vLONGUEUR=$(($LONGUEUR -1))
vHAUTEUR=$(($HAUTEUR -1))
WIDTH=`identify -format "%w" "$ligne"`
HEIGHT=`identify -format "%h" "$ligne"`
elif [ -x "/usr/bin/feh" ]; then
vLONGUEUR=$(($LONGUEUR -1))
vHAUTEUR=$(($HAUTEUR -1))
WIDTH=`feh -l "$ligne" | grep 1 | awk '{print $3}'`
HEIGHT=`feh -l "$ligne" | grep 1 | awk '{print $4}'`
else
# Sinon on quitte le script
echo "Ni feh ni imagemagick ne sont installés"
exit 1
fi
}
# Creation du fichier temporaire ( par defaut: temporaire=/tmp/wallpaper.log ).
create_temporaire() {
if [ -f "$temporaire" ]; then
msgR "Suppression des anciens fichiers temporaires"
rm "/tmp/wallpaper.bak"
rm "/tmp/wallpaper.bak2"
msgJ "creation du fichier $temporaire"
mv "$temporaire" "/tmp/wallpaper.bak"
# Creation un log recensant toutes les images contenues dans le dossier.
find "$file" -type f -name '*.jpg' -o -name '*.png' >> "/tmp/wallpaper.bak2"
cat "/tmp/wallpaper.bak" "/tmp/wallpaper.bak2" | sort | uniq > $temporaire
else
find "$file" -type f -name '*.jpg' -o -name '*.png' >> "$temporaire"
fi
}
create_database() {
if [ ! -f "$temporaire" ]; then
create_temporaire
else
while read ligne
do
dependance # test du dimensionnement: feh ou imagemagick
if [ "$WIDTH" -gt "$vLONGUEUR" ] && [ "$HEIGHT" -gt "$vHAUTEUR" ]; then
sleep 1
echo "$ligne" >> "$temporaire2" # image ajoutée
msgV "$ligne add"
cat "$temporaire2" | sort | uniq > "$file/$nom_database.db"
else
msgJ "$ligne non ajouté à $file/$nom_database.db"
fi
done < $temporaire
fi
resetlockfile
}
#Affiche les images contenus dans le fichier .db au format de l'écran.
database() {
if [ -f "$file" ]; then
echo "image: $file"
while true;
do
IMAGE=`cat "$file" | shuf -n 1`
feh --bg-scale "$IMAGE" #afficher l'image avec feh
sleep $temps
done &
elif [ -d "$file" ]; then
msgJ "c'est un dossier"
print_info
else
msgJ "le fichier ou dossier n'existe pas"
resetlockfile
exit 1
fi
}
print_info() {
cat <<- EOF
swall script qui affiche les images ayant la même résolution que votre écran.
Usage: $0 [option] <package> [...]
Options: -h, --help Show this help
-v, --version Print version
-d, --database <fichier> Afficher les images contenues
dans le fichier au format db.
-w, --wallpaper <dossier> Analyse le dossier image
pour creer un fichier au format db.
Paramètres à modifier: $0.conf
Taille de l'écran: "$LONGUEUR x $LONGUEUR"
nom de la base de données: "$nom_database"
temporisation: "$temps"
EOF
resetlockfile
exit $1
}
while getopts "vh-:vhw-:vhd-:" opt ; do
if [ $opt = "-" ] ; then
case $OPTARG in
help ) opt="h" ;;
version ) opt="v" ;;
wallpaper ) opt="w" ;;
database ) opt="d" ;;
* ) echo "option inconnue..." ;;
esac
fi
case $opt in
h )
lockfile
print_info
;;
v )
lockfile
clear
echo "Version: $VERSION $AUTEUR"
echo "Licence: $LICENCE"
;;
d )
lockfile
database
;;
w )
lockfile
wallpaper
;;
? ) msgJ "option inconnue"
;;
esac
done
OPTS="${@}"
swall.conf:
# Nom de la base de données (defaut: database)
nom_database="image.db"
# temporisation entre deux images (defaut: 15m)
temps=15m
# Longueur de la taille de l'écran (defaut 1280)
LONGUEUR=1280
# Largeur de la taille de l'écran (defaut 1024)
HAUTEUR=1024
# fichier temporaire (ne pas modifier):
temporaire="/tmp/wallpaper.log"
temporaire2="/tmp/wallpaper2.log"
LOCKFILE=/tmp/swall.lock
il y a peut-être des choses à modifier.
Dernière modification par wido (Le 25/02/2010, à 00:02)
Hors ligne
#7 Le 24/02/2010, à 23:42
- sputnick
Re : [bash]Script commande: option usage [résolu]
Je me sent pas de tout lire, mais deja ça ca va pas :
kill -15 $MYAPP_PID 2>&1 > /dev/null
-15 c'est deja le cas sans option.
la redirection correcte, c'est :
> /dev/null 2>&1
ou alors
&> /dev/null
la derniere solution est un bashism donc non POSIX.
Donc au final :
kill $MYAPP_PID &> /dev/null
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#8 Le 25/02/2010, à 00:03
- wido
Re : [bash]Script commande: option usage [résolu]
j'avais vu ça sur un blog
et merci pour la modif
Hors ligne