3

我正在编写一个接受参数的 bash 脚本。我正在使用 getopts 来实现它。

#!/bin/bash

while getopts ":a" opt; do
  case $opt in
    a)
      echo "-a was triggered!" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
  esac
done

但上面的代码返回给我这个错误。

'etOpts_test.sh: line 4: syntax error near unexpected token `in
'etOpts_test.sh: line 4: `  case $opt in

我正在使用 CentOs 5.5

4

2 回答 2

2

在第 4 行你可能想要case "$opt" in(引用$opt)。否则,如果它包含元字符,它可能会失败。

于 2011-12-19T11:56:41.880 回答
2

它应该是a:,而不是:a来表示需要参数的标志,而且问号也不应该被引用,因为它用作通配符。总体代码将是(还展示了一个标志-h不带参数):

function usage {
  echo "usage: ..."
}

a_arg=
while getopts a:h opt; do
  case $opt in
    a)
      a_arg=$OPTARG
      ;;
    h)
      usage && exit 0
      ;;
    ?)
      usage && exit 2
      ;;
  esac
done
于 2011-12-19T12:04:22.527 回答