Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 19/01/2010, 12h03   #1
Invité régulier
 
Inscription : décembre 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 32
Points : 6
Points : 6
Par défaut intégration de getopts dans script SH

bonjour, j'ai un souci qui me prends la tête depuis 2 bonnes heures :
Etant très mauvais en SH / bash etc, je dois néanmoins mettre la main à la pâte.
J'utilise FOP, extension Apache permettant d'imprimer des documents au format .fo, seulement j'aurais besoin d'intégrer dans la méthode d'appel du script un paramètre additionnel et de pouvoir le récupérer avec sa valeur (quelque chose du genre ! " -j %$JAVA_HOME% ").
J'ai éssayé avec "optargs" mais sans succés, si quelqu'un pouvait m'aider.

Le script appelé commence avec cette boucle de récupération d'arguments :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
for arg in "$@" ; do
  if [ "$arg" = "--noconfig" ] ; then
    no_config=true
  elif [ "$arg" = "--execdebug" ] ; then
    fop_exec_debug=true
  elif [ my"$arg" = my"--h"  -o my"$arg" = my"--help"  ] ; then
    show_help=true
    fop_exec_args="$fop_exec_args -h"
  else
    if [  my"$arg" = my"-h"  -o  my"$arg" = my"-help" ] ; then
      show_help=true
    fi
    fop_exec_args="$fop_exec_args \"$arg\""
  fi
done
J'aurais besoin d'intégrer un getopts dans le cas ou mon argument est un "j", pour pouvoir définir une variable système.

Désolé si ce n'est pas très clair, je serais ravi de vous éclairer, merci d'avance.

Blue
bluehige est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2010, 14h32   #2
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Bonjour,

Je ne crois pas que getopts soit envisageable parce que tu utilises les options longues du genre --abcd. Or getopts utilise les courtes: -a -b -c -d que l'on peut aussi écrire -abcd. Alors je te donne une alternative. Attention, ce n'est pas exactement ce que fait ton code initial:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
while { opt=$1; shift; }
do
  case $opt in
    "--noconfig")
      no_config="true"
    ;;
    "--execdebug")
      fop_exec_debug="true"
    ;;
    "-j")
      java_truc_muche=$1
      shift
    ;;
    "--h" | "-h" | "--help" | "-help")
      show_help="true"
      fop_exec_args="$fop_exec_args -h"
    ;;
  esac
done
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2010, 20h57   #3
Nouveau Membre du Club
 
David
Inscription : avril 2009
Messages : 26
Détails du profil
Informations personnelles :
Nom : David
Âge : 40

Informations forums :
Inscription : avril 2009
Messages : 26
Points : 27
Points : 27
Bonjour,

getopts n'est pas prévu pour les options longues, mais j'ai trouvé une astuce pour contourner ce petit problème :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
function help {
show_help="true"
fop_exec_args="$fop_exec_args -h"
}
 
while getopts hj:-: OPTION
do
  case $OPTION in
       h) help   # pour -h
           ;;
       j) java_truc_muche="$OPTARG"
          ;;
       -) case $OPTARG in
                noconfig) no_config="true"
                          ;;
               execdebug) fop_exec_debug="true"
                         ;;
                       h) help    # pour --h
                          ;;
                    help) help    # pour --help
                          ;;
            esac
            ;;
  esac
done
Par contre en ce qui concerne le -help, cela ne sera point possible, car pour lui, c'est 4 options courtes (et non une seule option longue).
syjis est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 23h31.


 
 
 
 
Partenaires

Hébergement Web