2017-10-02 5 views
0

Salut j'ai une question fondamentale, mais je n'ai pas pu trouver une bonne réponseGetopts même drapeau deux fois

J'ai ce code:

while getopts :weco:r:u:hP: ARG; do 
    case $ARG in 
      . 
      . 
      . 

    h) #set option "h" - show help; 
     help 
     ;; 
    P) #set option "P" - select Printer; 
     PRINTER=$OPTARG 
     ;; 
    \?) #unrecognized option - show help 
     echo -e \\n"Option not recognized." 
     help 
     ;; 
    esac 
done 

Et maintenant je veux utiliser « -P "deux fois, si vous utilisez" -P PRINTER ", il utilise l'imprimante donnée, mais si vous utilisez simplement" -P ", il utilise une valeur par défaut lue dans un fichier.

Puis-je gérer comme ça? Désolé si c'est la bonne réponse, je ne peux pas le tester dès maintenant.

while getopts :weco:r:u:hP:P ARG; do 
    case $ARG in 
      . 
      . 
      . 

    h) #set option "h" - show help; 
     help 
     ;; 
    P) #set option to use default 
     PRINTER=BLAFOO 
    P) #set option "P" - select Printer; 
     PRINTER=$OPTARG 
     ;; 
    \?) #unrecognized option - show help 
     echo -e \\n"Option not recognized." 
     help 
     ;; 
    esac 
done 
+0

Je pense que cette réponse vous aidera à https://stackoverflow.com/a/21709328/2088135 - vous pouvez définir la valeur par défaut, soit avant la boucle 'getopts' ou à l'intérieur du bloc' de if'. –

Répondre

0

Je vous suggère de re-écrire votre propre analyseur argument, puisque getopts ne supporte pas ce que vous voulez.

while true; do 
    case $1 in 
    -h) #set option "h" - show help; 
     echo help 
     shift 
     ;; 
    -P) #set option "P" - select Printer; 
     shift 
     case $1 in 
     ""|-*) 
     PRINTER=BLAFOO 
     ;; 
     *) 
     PRINTER=$1 
     shift 
     ;; 
     esac 
     # echo PRINTER=$PRINTER 
     ;; 
    -*|*) #unrecognized option - show help 
     echo -e \\n"Option not recognized." 
     echo help 
     break ;; 
    esac 
done 
+0

@Nico, est-ce que le travail est fait pour vous? S'il vous plaît donner quelques commentaires si vous le pouvez. – CWLiu