Более 1 варианта при запуске скрипта

Вопрос или проблема

Существует ли способ передать более одной опции при запуске скрипта?

Мой скрипт имеет следующий случай:

case "$1" in
 b)
 backup_start $1
 ;;

 h)
 _usage
 ;;

 *)
 echo 'Недопустимая опция, -h для помощи'
 ;;
esac

Я запускаю свой скрипт с:

myscript -b backupname

Но иногда я хотел бы запустить скрипт с опцией с другим аргументом… который я затем использую в случае внутри скрипта:

myscript -b backupname -t mynewarg

Способ сделать это — использовать цикл, пока getopts не сможет обработать аргументы:

while getopts "b:t:h" option; do
case $option in

 t)
 export MYINTERNALENV="$OPTARG"
 ;;

 b)
 backup_start "$OPTARG"
 ;;

 h)
 _usage
 ;;

 ?)
 echo 'Недопустимая опция, -h для помощи'
 ;;

 esac
done

Я предлагаю:

case "$1" in
  -h|--help)
    _usage
    exit
    ;;
esac

backup_start $@

Ответ или решение

В современном мире информационных технологий зачастую возникает необходимость при запуске скрипта передавать в него несколько опций, чтобы расширить функциональность и гибкость его работы. В приведенной вами ситуации рассмотрим, как можно адаптировать существующий код для обработки множественных аргументов с помощью использования цикла и утилиты getopts.

Теория

Интерпретатор bash предоставляет мощные механизмы для обработки аргументов командной строки. Одним из таких инструментов является встроенная команда getopts, которая упрощает обработку опций. Это особенно актуально, когда нужно поддерживать как краткий, так и длинный формат опций. getopts разобрает аргументы, переданные скрипту, и позволяет обрабатывать их в цикле, извлекая каждый аргумент и выполняя соответствующие действия.

Пример

Вы привели пример простого использования конструкции case для обработки единственного аргумента. Однако, чтобы обработать несколько опций, каждая из которых может сопровождаться своими аргументами, рекомендуется использовать getopts.

Рассмотрим обновленный скрипт, в который вы добавили новые опции:

while getopts "b:t:h" option; do
  case $option in
    t)
      export MYINTERNALENV="$OPTARG"
      ;;
    b)
      backup_start "$OPTARG"
      ;;
    h)
      _usage
      ;;
    ?)
      echo 'Invalid option, -h for help'
      ;;
  esac
done

Этот код умеет разбирать опции -b, -t, и -h. Каждую из них можно использовать с дополнительным аргументом (например, для опции -b это будет имя бэкапа). getopts сохраняет аргумент, переданный каждой опции, в переменную OPTARG, что позволяет использовать его в теле case.

Применение

Используя getopts, скрипт становится более универсальным и масштабируемым. Это позволяет:

  1. Поддерживать множество опций и аргументов, расширяя гибкость скрипта.
  2. Прозрачно обрабатывать ошибки и не предусмотреть неправильные опции. Например, вы можете предложить пользователю подсказку, если он введет неправильную опцию.
  3. Легко интегрировать новые опции без значительных изменений в коде скрипта.

Преимущества и практические советы

  1. Чистота и поддерживаемость кода: Исправление ошибок и добавление новых опций станут более простыми и быстрыми процессами.

  2. Удобство для пользователя: Приложение станет более интуитивным из-за возможности предоставления четкой подсказки по использованию с помощью -h.

  3. Оптимизация: Встраивание параметров в команды может предлагать динамическое управление логикой работы скрипта, что полезно в различных сценариях, таких как автоматизация процессов.

С использованием цикла можно также учитывать более сложные структуры, такие как обязательные и необязательные аргументы, флаги и так далее. Эти характеристики подчеркивают ценность гибкости скрипта.

Заключение

Обработка аргументов командной строки является важным аспектом написания эффективных и гибких скриптов. Применяя getopts, вы создаете скрипт, который может быть легко расширен и адаптирован к меняющимся требованиям. За счет использования циклов и суперпозиции различных функций, вы существенно повышаете удобство использования и возможность масштабирования вашего решения.

Таким образом, при правильной обработке аргументов и использовании getopts, ваш скрипт становится эффективным инструментом, который обеспечивает многоцелевую функциональность и удовлетворяет разнообразные бизнес-требования.

Оцените материал
Добавить комментарий

Капча загружается...