我有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>不应该工作。
答案 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
。