getopts не работает - Баш - PullRequest
       27

getopts не работает - Баш

2 голосов
/ 19 декабря 2011

Я пишу 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

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

Это должно быть 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
2 голосов
/ 19 декабря 2011

В строке 4 вы, вероятно, захотите case "$opt" in (цитата $opt). В противном случае, если он содержит метасимвол, он может потерпеть неудачу.

...