2016-05-12 8 views
1

無効なオプションを解析する方法は?私はいくつかのオプションを解析するには、次のスクリプトを書いています

#!/bin/bash 
while [[ $# > 1 ]] 
do 
key="$1" 
case $key in 
    -i|--inbound) 
     inbound="true" 
    shift # past argument 
    ;; 
    -o|--outbound) 
     outbound="true" 
    shift # past argument 
    ;; 
    *) 
     echo "hola" 
     exit 1 

    ;; 
esac 
shift # past argument or value 
done 
echo $inbound 
echo $outbound 

問題は、私は無効なオプションを受信した場合、私は次のことを試してみました、私はプログラムを終了したいということです。

*) 
      exit 1 
      echo "invalid option" 


     ;; 

しかし、ときに私は、このようなプログラムを実行します。何が起こる、私はこの問題を解決するためにどんな提案をお願いしたいと思い、私の所望の出力をしたい、bashのscript.sh -invalid:

invalid option 
+0

問題はありませんが、 '>'は '['/'[['。 '-gt'や'(($#> 1)) 'が必要です。あなたのスクリプトに 'set -x'を追加するか(あるいは' bash -x script.sh ... 'を実行してください)、あなたのロジックに少なくとも1つの問題があるはずです(なぜ' bash script.sh -invalid'がやっていないのか何か)。 –

答えて

2

while [[ $# > 1 ]]

あなたは数値比較ではなく、文字列比較をしたい

while (($# >= 1)) 
  1. でなければなりません。この場合は差はありませんが、文字列10が文字列2より小さいので、2と比較すると大きな違いがあります。

  2. とにかく、引数を1つ指定してスクリプトを呼び出すと、$#は1になります。したがって、より大きい比較は正しくありません。あなたが本当に持っていた場合

最後に、:exitが最初に起こっているだろうので

exit 1 
    echo "hola" 

エコーは、実行されないでしょう。

+0

または、私はちょうど 'while(($#))' – andlrc

+0

と思っています。コードを最初に置いたときにエラーだったと申し訳ありませんが、エコーが終了しても何も起こりません。 – neo33

+0

@andlrc:うん、それもうまくいくだろう。他の単純なものは 'for key do'でしょう。 – rici

関連する問題