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

当您通过时-nngetopt只需将其解释为您已指定-n -n. 这通常是传递参数的有效方式 - 例如,ssh -vvv以比ssh -v. 在其他命令中,您可以选择启用或禁用功能,最后一个选项(启用或禁用)“获胜”。例如,如果用户定义了一个别名alias grep='grep -H'(“打印每个匹配的文件名。”),但想要覆盖它,这很有用。为此,她可以运行command grep或简单地通过运行恢复选项,grep -h然后将其解析为grep -H -h.

如果你想检查一个选项是否被多次指定(尽管这通常不是必需的),你应该稍后在解析$TEMP.

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

于 2012-04-18T11:25:45.477 回答