URL: https://linuxfr.org/forums/programmation-shell/posts/la-bonne-fa%C3%A7on-de-g%C3%A9rer-les-options-et-arguments-dans-un-shell Title: La bonne façon de gérer les options et arguments dans un shell Authors: tanat Date: 2007年04月08日T17:24:07+02:00 Tags: Score: 0 J'ai recherché assez longuement comment créer un script shell capable de gérer de multiples options facultatives ainsi que de multiples arguments. J'ai finalement trouvé des solutions intéressantes que je souhaite partager ici. On pourra facilement réutiliser la structure de ce script pour d'autres applications. Merci aux divers contributeurs de proposer d'éventuelles corrections ou améliorations (notamment, par exemple une gestion des erreurs avec retour de code d'erreur numérique). Voici le script en question : #!/bin/bash # # Fichier : /usr/bin/reduit # Droits : rwxr-xr-x # Proriétaire : root:root # # # Shell script pour redimensionner les images d'un répertoire. # Aide : Taper reduit (sans arguments) # # Créé par : # Anatole, le 08/04/2007. # Paramètres par défaut : # ----------------------- SIZE=1024 QUALITY=80 OUTPUTDIR="/tmp/imagesReduites" PREFIX="r" POSTFIX="_" # Affiche l'aide : # ---------------- function print_usage() { £spaces£ £/spaces£echo "Usage :" £spaces£ £/spaces£echo "0ドル [ -s SIZE] [ -q QUALITY ] [ -o OUTPUTDIR ] fichiers" £spaces£ £/spaces£echo "0ドル réduit une image à la largeur indiquée par SIZE (en pixels) \ et à la qualité JPG indiquée par QUALITY (de 0:meilleure qualité \ à 100:meilleure compression)." £spaces£ £/spaces£echo " " £spaces£ £/spaces£echo "Valeurs par défaut :" £spaces£ £/spaces£echo " " £spaces£ £/spaces£echo "SIZE : $SIZE" £spaces£ £/spaces£echo "QUALITY : $QUALITY" £spaces£ £/spaces£echo "OUTPUTDIR : $OUTPUTDIR" } # ------------------------------------------------------------- # Début du script # ------------------------------------------------------------- # Si pas d'argument, on affiche l'aide # ------------------------------------ if [ "1ドル" == "" ] ; then £spaces£ £/spaces£print_usage £spaces£ £/spaces£exit 0 fi # Si des options sont choisies, on les utilise # -------------------------------------------- while getopts s:q:o:h option do £spaces£ £/spaces£case $option in £spaces£ £/spaces£s) SIZE=$OPTARG ;; £spaces£ £/spaces£q) QUALITY=$OPTARG ;; £spaces£ £/spaces£o) OUTPUTDIR=$OPTARG ;; £spaces£ £/spaces£?) print_usage ;; £spaces£ £/spaces£esac done # On passe l'index $OPTIND aux arguments donnés après les options shift $(($OPTIND - 1)) # Boucle sur les différents noms de fichiers donnés en arguments # -------------------------------------------------------------- # (Attention, un seul argument peut représenter plusieurs fichiers # Exemple : reduit *.jpg *.JPG) for filename in $@ do £spaces£ £/spaces£for img in `find $filename` £spaces£ £/spaces£do £spaces£ £/spaces£# Si la cible existe, on passe à la suivante £spaces£ £/spaces£if [ -f ${OUTPUTDIR}/${PREFIX}${SIZE}${POSTFIX}$img ] ; then £spaces£ £/spaces£echo "${OUTPUTDIR}/${PREFIX}${SIZE}${POSTFIX}$img existe déjà -> Ignoré." £spaces£ £/spaces£else £spaces£ £/spaces£echo "convert $img vers ${OUTPUTDIR}/${PREFIX}${SIZE}${POSTFIX}$img en cours..." £spaces£ £/spaces£convert -resize $SIZE -quality $QUALITY $img ${OUTPUTDIR}/${PREFIX}${SIZE}${POSTFIX}$img £spaces£ £/spaces£fi £spaces£ £/spaces£done done

AltStyle によって変換されたページ (->オリジナル) /