Часть case ... esac
является оператором switch
. Если $1
совпадает с -*
(то есть начинается с -
), то первый случай будет выполнен - и ничего не будет делать. В противном случае (если $1
соответствует *
, что, в зависимости от настроек оболочки, может исключать вещи, начинающиеся с .
), будет выполняться exec $*
.
Вокруг этого есть оператор if, обеспечивающий выполнение переключения только в том случае, если действительно есть какие-либо параметры, с которыми нужно проверять (количество параметров больше нуля).