Evgenii Legotckoi
02 грудня 2018 р. 20:58

Використання getopts в сценаріях bash для передачі параметрів

Зміст
  1. 1.

Під час створення сайту для автоматизації процесу деплою написав кілька bash скриптів.

Для налаштування поведінки скриптів використовую передачу аргументів, які в bash скрипті розуміються бібліотекою getopts.


Getopts

Як правило, скрипти використовують Getopts для аналізу аргументів, переданих ним. Коли ви вказуєте args у командному рядку, getopts аналізує ці аргументи замість скрипту і далі вже скрипт використовує проаналізовані дані, які розібрали getopts .

Наприклад, у своєму випадку я використовую кілька дій, які мають бути виконані скриптом.

while getopts p:dicmz option
do
    case "${option}"
    in
    p) PASSWORD=${OPTARG};;                 # Password for reload services: gunicorn and celery
    d) DEPLOY_PROJECT_PACKAGES=true;;       # Deploy local projects packages
    i) INSTALL_REQUIREMENTS=true;;          # Install or update new packages from requirements
    c) COLLECTSTATIC=true;;                 # Execute collectstatic
    m) MIGRATE=true;;                       # Execute migrate
    z) INGORE_BACKUP=true;;                 # WARNING: Be careful with this option.
                                            # Do not use it, when execute migrations or add new application or git submodule
    esac
done

У мене виконується деплой проекту на сайт, встановлення або оновлення необхідних пакетів у проекті, складання нової статики, міграція бази даних і якщо буде потрібно, то ігнорування створення бекапу проекту, хоча цим я користуюсь рідко. Краще перестрахуватися зайвий раз та виконати бекап.

Таким чином, скрипт можна запустити з параметрами таким чином

./deploy.sh -icm -p mypassword

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

Переданий параметр не вимагає аргументу перевірятиметься в умовах так

if [ "$INGORE_BACKUP" ]
then
    # Deployment without backup"
else
    # Execute backup
fi

Рекомендовані статті на цю тему

По статті запитували0питання

1

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up