Forum Programmation.shell script -o argument -t argument

Posté par  .
Étiquettes : aucune
0
19
mar.
2006
Bonjours

J'aimerais ecrire un script qui accepte des option est des argument au option

#! /bin/sh
opt_qualite=5
opt_recursive=0
opt_ecrase=0
opt_directory=0

OPTERR=0
# Analyse les argument de la ligne de commande
while getopts ":rRfFqQdD?:" opt ; do
case $opt in
r|R ) opt_recursive=1 ;;
f|F ) opt_ecrase=1; ;;
q|Q ) opt_qualite="valeur indiqué apres l'option -q" ;;
d|D ) opt_directory= "valeur indiqué apres l'option -d";;
? ) echo "option illégale -$OPTARG"
exit 1
esac
done
shift $(($OPTIND - 1))
#}

echo $opt_recursive
echo $opt_ecrase
echo $opt_directory
echo $opt_qualite

les argument de l'option -q ou -Q sont une valeur qui est soit 5, 10 ou 15
l'argument de l'option -d ou -D est le chemin vers un repetoire dans lequel nous pouvons ecrire.

J'ai trouvé une astuce avec shift, mais elle ne me conviens pas car
elle n'est pas asser souple. Car avec cette astuce les option devienent obligatoire et dans un ordre precis ce qui ne m'interesse pas.

Si vous avez un solution a mon prb n'hesitez pas a eclairer mes lanterne.

Sebastien
  • # Tu y étais presque

    Posté par  . Évalué à 3.

    les ":" servent à désigner les options prenant un argument.
    Pour ces options, $OPTARG vaut l'argument.


    #! /bin/bash

    opt_qualite=5
    opt_recursive=0
    opt_ecrase=0
    opt_directory="/"
    OPTERR=0

    # Analyse les argument de la ligne de commande

    while getopts "rRfFq:Q:d:D:?" opt ; do
    case $opt in
    r|R ) opt_recursive=1 ;;
    f|F ) opt_ecrase=1 ;;
    q|Q ) opt_qualite=$OPTARG ;;
    d|D ) opt_directory=$OPTARG;;
    * ) echo "option illégale $OPTIND"
    exit 1
    esac
    done

    echo $opt_recursive
    echo $opt_ecrase
    echo $opt_directory
    echo $opt_qualite

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.