Необязательный аргумент GETOPT, приводящий к пустой переменной / аргумент, не переданный в переменную - PullRequest
0 голосов
/ 03 октября 2019

У меня есть следующий скрипт bash:

        while getopts g:s:l:o:t:f:rbh option
    do
        case "${option}" 
            in
            g) genome=${OPTARG};;
            s) species=${OPTARG};;
            l) RepSub=${OPTARG};;
            o) directory=${OPTARG};;
            r) RepSpec=${OPTARG};;
            t) ProcNum=${OPTARG};;
            f) Flank=${OPTARG};;
            b) both=${OPTARG};;
            h) usage; exit 1;; 
        esac
    done

echo "Species is $RepSpec"

case $RepSpec in
    "") stage="Running Initial Mask with Custom Library" ; firstCustom;;
    *) stage="Running Initial Mask with RepBase" ; firstMask;;
esac

Когда я запускаю этот скрипт с указанием флага -r (который я пытаюсь сделать необязательным), переменная $ RepSpec остается пустой, и это приводит кнеправильная команда выполняется во втором операторе case. По сути, я пытаюсь написать сценарий, в котором флаг -r является необязательным и, если он указан, должен запускаться «firstmask». Если он пуст, то должен запускаться «firstCustom».

Я пытался:

изменить getopts на :r: , :r , r: - $ RepSpec остался пустым, если не указано r:, но я неполностью уверен, почему и означает ли это, что r является обязательным флагом?

Я также попытался использовать ifelse:

if [ -z "$RepSpec" ]; then
    firstCustom
else
    firstMask
fi

Однако я также не мог заставить это работать, поэтому япри условии, что моя проблема лежит где-то в формате getopts?

Заранее спасибо за любую помощь!

1 Ответ

0 голосов
/ 03 октября 2019

Я просто пропустил :, чтобы гарантировать, что getopts ищет аргумент опции

Обновлено:

while getopts g:s:l:o:t:f:r:b:h: option

и теперь скрипт работает

...