У меня есть следующий скрипт 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?
Заранее спасибо за любую помощь!