2014-09-02 6 views
1

Je suis nouveau pour le script Unix. Je suis en train de créer un script qui agit comme une commande unix, tels que "ls -l", "ls-la"comment obtenir des arguments de script Unix?

 

myscript -x  ----> do thing 1 
myscript -xy ----> do thing 1, do thing 2 
myscript -yz ----> do thing 2, do thing 3 

donc, "-x", "-xy" sont 0 $? ou nous devons utiliser différentes variables pour obtenir cela?

Merci

+3

related: [Comment analyser les arguments de la ligne de commande dans bash?] (Http://stackoverflow.com/q/192249/4279) – jfs

+0

Voir (en plus des nombreuses, * nombreuses * fois où cela a été demandé et répondu sur StackOverflow) BashFAQ # 35: http://mywiki.wooledge.org/BashFAQ/035 –

Répondre

4

Dans Bash, les arguments commence avec l'indice 1, alors que $ 0 est réservé à la commande elle-même. Cela s'applique également aux fonctions et commandes.

Voici comment obtenir quelque chose de semblable à ce que vous avez demandé:

while [ "$1" != "" ] ; do 
    case "$1" in 
    -x) 
     do_thing_1 
     ;; 
    -y) 
     do_thing_2 
     ;; 
    -z) 
     do_thing_3 
     ;; 
    *) 
     error $1 
     exit -1 
     ;; 
    esac 
    shift 
done 

Vous devez déclarer les fonctions do_thing_xxx et erreur.

J'ai dit "quelque chose de similaire" parce que ce script comprendra "myscript -x -y -z" mais détecte que "myscripts -xyz" est faux.

Pour obtenir un comportement plus complexe, comme le vôtre, vous devez utiliser Getopt, comme expliqué ici: http://wiki.bash-hackers.org/howto/getopts_tutorial

espoir qui aide.

+0

En tant qu'état 'man bash (1)', dans linux "La commande getopt fait partie du paquet util-linux et est disponible à partir de [link] (ftp://ftp.kernel.org/pub/linux/utils/util-linux/) .Peut-être que vous avez besoin d'installer un port – HappyCactus

+0

mais je vois la commande getopts dans le terminal.J'utilise votre code, mais il semble ne pas détecter les options "-x", "-y", il arrive toujours au dernier cas "*" Une autre chose est que j'utilise [-z "$ 1"] pour voir si $ 1 est vide ou non – chipbk10

+0

fonctionne bien sur mon mac, à la fois avec bash et sh. J'ai vérifié en utilisant "echo" comme cas. – HappyCactus

Questions connexes