Чтение параметра из пользовательской опции в Bash - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь создать bash-скрипт и взять 2 варианта

  • bePort и fePort

так как это работает

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

Я бегу

bash test.sh -a aaa -b bbb

Я получил

-a was triggered!, Parameter: aaa
-b was triggered!, Parameter: bbb

Итак, я попробовал это

while getopts ":fe:be:" opt; do
  case $opt in
    fe)
      echo "-fe was triggered!, Parameter: $OPTARG" >&2
      ;;
    be)
      echo "-be was triggered!, Parameter: $OPTARG" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
  esac
done

Но, похоже, это не работает.

Я бегу

bash test.sh -fe 4444 -be 3333

В моем приглашении ничего не печатается.

Я ожидал увидеть что-то подобное

-be was triggered!, Parameter: 3333
-fe was triggered!, Parameter: 4444

Как можно отладить это дальше?

1 Ответ

0 голосов
/ 02 мая 2018

Это потому что -fe 4444 анализируется как -f -e 4444.

Тестовый код:

while getopts ":fe:be:" opt; do
  case $opt in
    b)
      echo "-b was triggered!, Parameter: $OPTARG" >&2
      ;;
    e)
      echo "-e was triggered!, Parameter: $OPTARG" >&2
      ;;
    f)
      echo "-f was triggered!, Parameter: $OPTARG" >&2
      ;;
    fe)
      echo "-fe was triggered!, Parameter: $OPTARG" >&2
      ;;
    be)
      echo "-be was triggered!, Parameter: $OPTARG" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
  esac
done

Выход:

$ bash test.sh -fe 4444 -be 3333
-f was triggered!, Parameter: 
-e was triggered!, Parameter: 4444
-b was triggered!, Parameter: 
-e was triggered!, Parameter: 3333

Уместно использовать длинные опции, такие как --fe 4444. О том, как разобрать длинные варианты с помощью bash, было дано в другом посте.

-> Использование getopts в сценарии оболочки bash для получения параметров длинной и короткой командной строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...