O que eu posso sugerir é usar flags com o uso do while ou for.
# Opções de linha de comando
while test "${1#-}" != "$1"
do
case "$1" in
-l | --left ) shift; left=1;;
-r | --right ) shift; right=1;;
-t | --top ) shift; top=1;;
-b | --bottom ) shift; bottom=1;;
-H | --horizontal) shift; left=1; right=1;;
-V | --vertical ) shift; top=1; bottom=1;;
--*) zztool erro "Opção inválida $1"; return 1;;
*) break;;
esac
done
Em trechos posteriores as flags são tratadas e determinam o fluxo do processo.
Espero que ajude.