Если функция или приложение имеет больше нуля аргументов, у них всегда есть последний аргумент.
Если вы хотите прочитать опцию флага и пары значений, как в:
$ ./t.sh -o output -i input -l last
И вы хотите принять переменное количество пар опция / значение,
И не хочу огромное "если .. тогда .. еще .. фи" дерево,
Затем, после проверки количества аргументов, отличных от нуля и четного,
Напишите цикл while с этими четырьмя операторами eval в качестве тела, за которым следует оператор case, использующий два значения, определенные в каждом проходе цикла.
Сложная часть сценария демонстрируется здесь:
#!/bin/sh
# For each pair - this chunk is hard coded for the last pair.
eval TMP="'$'$#"
eval "PICK=$TMP"
eval TMP="'$'$(($#-1))"
eval "OPT=$TMP"
# process as required - usually a case statement on $OPT
echo "$OPT \n $PICK"
# Then decrement the indices (as in third eval statement)
:<< EoF_test
$ ./t.sh -o output -i input -l last
-l
last
$ ./t.sh -o output -l last
-l
last
$ ./t.sh -l last
-l
last
EoF_test