2013-01-22 2 views
0

Ce code avec lesquels je travaille:Bash Shell Spécifiez les options valides pour getops

TYPE="" 
FILE="" 

while getopts "t:f:" opt; do 
    case $opt in 
     t) TYPE="$OPTARG" 
      ;; 
     f) FILE="$OPTARG" 
      ;; 
    esac 
done 

if [ -z "$TYPE" ]; then 
    echo "No -t. Bye." 
    exit 1 # error 
else 
    if [ -n "$FILE" ]; then 
    echo "$TYPE and $FILE" 
    else 
    echo JUST $TYPE 
    fi 
fi 

Est-il possible de spécifier des options valides pour le type de $? Par exemple les options de type valides sont:

IMAGE, ZIP, DOC 

Si l'un de ces types sont spécifiés comme arguments valables alors le script exécute la ligne existante:

"echo "$TYPE and $FILE"" 

Sinon, il ECHOS une erreur et se ferme. Est-ce possible?

+1

Bien sûr, qu'est-ce que vous chercher/essayer? –

+0

Ceci est le plus proche que je pourrais trouver, mais je ne pouvais pas savoir comment adapter: http://stackoverflow.com/questions/4587076/how-to-create-a-bash-script-that-takes-arguments – Jimmy

Répondre

3

Si vous devez filtrer -t commutateur:

(...) 
     t) 
      case $OPTARG in 
       img|image|doc) 
        TYPE="$OPTARG" 
       ;; 
       *) 
        echo >&2 "Unsupported type..." 
        exit 1 
       ;; 
      esac 
     ;; 
(...) 
+1

probablement don ' t voulez 'break' -' t) cas $ OPTARG dans (img | image | doc) TYPE = $ OPTARG ;; ... 'pourrait être mieux –

+0

Merci pour la réponse. Je suis un peu confus par votre exemple, ai-je encore besoin de getopts "t: f:" opt; faire la ligne? – Jimmy

+0

J'ai deviné comment l'implémenter ici mais je suis inquiet j'ai mal compris https://gist.github.com/4599218 – Jimmy