2013-01-25 9 views
8

Non so se è possibile, ma voglio scrivere script di shell che si comportano come eseguibili regolari con opzioni. Come un esempio molto semplice, si consideri un foo.sh shell script che viene configurato in modo da essere eseguibile:Come scrivere script di shell Unix con opzioni?

./foo.sh 
    ./foo.sh -o 

e il codice foo.sh opere come

#!/bin/sh 
    if ## option -o is turned on 
     ## do something 
    else 
     ## do something different 
    endif 

E 'possibile e come fare? Grazie.

risposta

9
sgeorge-mn:stack sgeorge$ cat stack.sh 
#!/bin/sh 
if [[ $1 = "-o" ]]; then 
    echo "Option -o turned on" 
else 
    echo "You did not use option -o" 
fi 

sgeorge-mn:stack sgeorge$ bash stack.sh -o 
Option -o turned on 

sgeorge-mn:stack sgeorge$ bash stack.sh 
You did not use option -o 

FYI:

$1 = First positional parameter 
$2 = Second positional parameter 
.. = .. 
$n = n th positional parameter 

Per le opzioni più pulito/flessibili, leggere questo altro thread: Using getopts in bash shell script to get long and short command line options

+0

Grazie. In realtà conosco il trucco dell'argomentazione, ma è troppo zoppo ... "getopt" sembra interessante. – 4ae1e1

+0

quell'opzione deve essere solo il primo parametro? E se ho due opzioni, come fai a distinguere? –

3

Sì, è possibile utilizzare la shell built-in getopts, o lo stand -alone getopt per questo scopo.

2

questo è il modo come farlo in uno script:

#!/usr/bin/sh 
# 
# Examlple of using options in scripts 
# 

if [ $# -eq 0 ] 
then 
     echo "Missing options!" 
     echo "(run $0 -h for help)" 
     echo "" 
     exit 0 
fi 

ECHO="false" 

while getopts "he" OPTION; do 
     case $OPTION in 

       e) 
         ECHO="true" 
         ;; 

       h) 
         echo "Usage:" 
         echo "args.sh -h " 
         echo "args.sh -e " 
         echo "" 
         echo " -e  to execute echo \"hello world\"" 
         echo " -h  help (this output)" 
         exit 0 
         ;; 

     esac 
done 

if [ $ECHO = "true" ] 
then 
     echo "Hello world"; 
fi 

click here per fonte

+0

Questa è la vera soluzione poiché consente qualsiasi opzione in qualsiasi ordine –

+0

nell'opzione h) Suppongo che dovresti anche sostituire 'args.sh' con' $ 0' –

Problemi correlati