getopt命令部分解析

时间:2012-04-18 09:16:04

标签: linux bash shell

我有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 { {1}},--targetdir--help--notar--verbose。但是,如果我传递--zone-nn-hh这样的参数,它就会起作用,而且它不应该起作用。

更准确地说我想要的是,如果我执行'mysql-backup-start'应该有效,'mysql- backup-start --notar'应该有效,'mysql-backup-start --n'不应该有效,'mysql-backup-start --targetdir = / home / backup / mysql'应该有效,< strong>'mysql-backup-start --targetsdir = / home / backup / mysql'不应该工作,' - mysql-backup-start --ta = / home / backup / mysql'< / strong>不应该工作。

1 个答案:

答案 0 :(得分:1)

当您通过-nn时,getopt只是将其解释为您指定-n -n。这通常是传递参数的有效方法 - 例如,ssh -vvv以比ssh -v高得多的详细级别运行。在其他命令中,您可以选择启用或禁用功能,最后一个选项(启用或禁用)“获胜”。例如,如果用户定义了alias grep='grep -H'之类的别名(“打印每个匹配的文件名”),但是想要覆盖它,则这很有用。要做到这一点,她可以运行command grep或只是通过运行grep -h来恢复该选项,然后将其解析为grep -H -h

如果要检查多次未指定选项(尽管通常不需要这样做),则应在解析$TEMP时稍后执行此操作。

--tar 应该 工作 - 请参阅@ tuxuday的评论和man getopt