2016-05-18 3 views
1

sh myscript.sh -a helloとしてスクリプトを呼び出す場合getoptで引数を取らない引数にパラメータを渡さないようにするには?例えば

#!/bin/sh 

OPTS=`getopt -o ahb:c: --long help,name:,email: -- "[email protected]"` 
#echo "$OPTS" 
eval set -- "$OPTS" 

usage() { 
    echo "type -h for help" 
} 


while true; do 
    case "$1" in 
     -a) echo "a is a short option that do not take parameters"; shift ;; 
     -b) echo "b is a short option that requires one parameter and you specified $2"; shift 2;; 
     -c) echo "c is a short option that requires one parameter and you specified $2"; shift 2;; 
     --name) echo "your name is $2"; shift 2;; 
     --email) echo "your email is $2"; shift 2;; 
     -h | --help) echo "Google search yourself !"; shift 1;; 
     --) usage ; shift; break ;; 
     *) echo "hello"; break ;; 

    esac 
done 

だから、それは-aがパラメータを取らないことを伝えるエラーをスローする必要があり、このスクリプトを検討してください。

これを行う方法はありますか?

+0

あなたは「** - a **は何もパラメータを取っていません」と言っていると思います。しかし、それはそうではありません。なぜなら、オプションの後に来るものはすべて引数とみなされるからです。 –

+0

@MichaelVehrsそう言及してくれてありがとう。私はその質問を編集した。しかし、getoptは - または - 接頭辞付きのものだけを引数とみなします。そうではありませんか?だから私はそれを行う方法があるはずです。 – Veera

+0

私はあなたが何を意味するか分からないが、 'myscript -a hello -b'は' -a'が最後のオプションではないので失敗するはずです。一方、 'myscript -a hello'は完全に問題ありません。この場合、' hello'は位置パラメータです。 –

答えて

1

「第2の」パラメータを望まないので、でもは実際には3番目のパラメータです。

-aの後にパラメータが必要ない場合は、$ 3が存在するかどうかを確認する必要があります。 ($ 2になります「 - 」)ここで

は-aの後に何かを補給するときにエラーが出力されます固定コードです:

#!/bin/sh 

OPTS=`getopt -o ahb:c: --long help,name:,email: -- "[email protected]"` 
#echo "$OPTS" 
eval set -- "$OPTS" 

usage() { 
    echo "type -h for help" 
} 


while true; do 
    case "$1" in 
     -a) if [ ! -z "$3" ] ; then 
#Check if there is something after -a 
       echo "a is a short option that do not take parameters"; 
else 
     echo "Whatever.."; 
fi 
shift ;; 
     -b) echo "b is a short option that requires one parameter and you specified $2"; shift 2;; 
     -c) echo "c is a short option that requires one parameter and you specified $2"; shift 2;; 
     --name) echo "your name is $2"; shift 2;; 
     --email) echo "your email is $2"; shift 2;; 
     -h | --help) echo "Google search yourself !"; shift 2;; 
     --) usage ; shift; break ;; 
     *) echo "hello"; break ;; 

    esac 
done 

私は、これはあなたが:)

を探していたものであると思います
+0

これは私が探していたようなものです。ありがとう! – Veera

関連する問題