параметр -n
проверяет если строка имеет ненулевую длину.
if [ ... ]; then #posix compliant condition tests
if [[ ... ]]; then #extended condition tests
Кажется, что расширенные тесты условий работают иначе, чем posix.
> if [ -n $unsetVar ];then echo yes ; fi
yes
>
> if [ -n "$unsetVar" ];then echo yes ; fi
>
> if [[ -n $unsetVar ]];then echo yes ; fi
>
либо используйте расширенные условия для [[...]]
, либо заключите переменную в кавычки. В настоящее время ваш оператор elif
всегда верен.