0

引数を検証することを想定しているbashスクリプトの一部があり、一致する場合は続行するか、終了します。
これが私のスクリプトです

TEMP=`getopt --options b,t:,h,n,v,z: --longoptions batch,targetdir:,help,notar,verbose,zone: --name 'mysql-backup-start' -- "$@"`    
if [ $? -ne 0 ]; then  
  echo "Command Incoorect"  
  exit 1  
fi   

mysql-backup-start次の引数を取る必要があります: -b-t-h-n-v-z --targetdir--help--notarおよび。ただし、、、またはなどの引数を渡すと機能し、機能するはずがありません。 --verbose--zone-nn-hh--tar

より正確に言うと、「mysql-backup-start」を実行すると、 「mysql-backup - start --notar」が機能し、 「mysql-backup-start --n」が機能しなくなり、 「mysql 」が機能するはずです。 -backup-start --targetdir=/home/backup/mysql' は機能するはずです。'mysql-backup -start --targetsdir=/home/backup/mysql'は機能しません。'--mysql-backup-start --ta =/home/backup/mysql' は機能しないはずです。

4

1 に答える 1

1

を渡す-nnと、を指定したgetoptかのように解釈されます-n -n。多くの場合、これは引数を渡す有効な方法です。たとえば、ssh -vvvよりもはるかに高い詳細レベルで実行しますssh -v。他のコマンドには、機能を有効または無効にするオプションがあり、最後のオプション (有効または無効) が優先されます。これは、たとえば、ユーザーがalias grep='grep -H'(「一致ごとにファイル名を出力する」) のようなエイリアスを定義したが、それをオーバーライドしたい場合に役立ちます。それを行うには、彼女はcommand grepオプションを実行するか、実行して単純に元に戻すことができ、grep -hこれは に解決されgrep -H -hます。

オプションが 2 回以上指定されていないことを確認したい場合 (これは通常は必要ありません)、後で解析するときに行う必要があります$TEMP

--tar 動作しないはずです - @tuxuday のコメントと を参照してくださいman getopt

于 2012-04-18T11:25:45.477 に答える