BASH脚本和参数带/出选项

时间:2015-08-07 13:56:30

标签: bash variables parameters case

我想创建具有两种类型的参数/选项的脚本。

例如:

./script.sh --date 15.05.05 --host localhost

但我也希望能够使用没有值的参数运行它:

./script --date 15.0.50.5 --host localhost --logs --config

现在我有类似的东西:

while [[ $# -gt 0 ]]; do
  case $1 in
    --date|-d ) DATE="$2" ;;
    --host|-h ) HOST="$2" ;;
    --logs ) LOGS=true ;;
    --config ) CONFIG=true ;;
#    --all ) LOGS=true ; PROCS=true ; CONFIG=true ;;
    * ) usage; exit 1 ;;
  esac
  shift 2
done

但是,当我这样使用它时,我必须在--logs--config之后添加一个值,以防止shift获取下一个有效参数,如下所示:

./script.sh --date 15.05.05 --logs 1 --config 1

还有其他办法吗?

1 个答案:

答案 0 :(得分:3)

这个简单的解决方案怎么样?

while [[ $# -gt 0 ]]; do
  case $1 in
    --date|-d ) DATE="$2" ; shift 2 ;;
    --host|-h ) HOST="$2" ; shift 2 ;;
    --logs ) LOGS=true ; shift 1 ;;
    --config ) CONFIG=true ; shift 1 ;;
    * ) usage; exit 1 ;;
  esac
done

或者你可以使用getopts(虽然它只支持短参数),大概是这样的:

while getopts ":d:h:lc" OPT; do
  case $opt in
    -d ) DATE="$OPTARG" ;;
    -h ) HOST="$OPTARG" ;;
    -l ) LOGS=true ;;
    -c ) CONFIG=true ;;
    * ) usage; exit 1 ;;
  esac
done