getopt
сделает это за вас. Он обрабатывает короткие параметры, длинные параметры, параметры с аргументами и без них, --
для завершения анализа параметров и многое другое.
Использование Boilerplate выглядит следующим образом:
options=$(getopt -o hf: -l help,file: -n "$0" -- "$@") || exit
eval set -- "$options"
while [[ $1 != -- ]]; do
case $1 in
-h|--help) echo "help!"; shift 1;;
-f|--file) echo "file! $2"; shift 2;;
*) echo "bad option: $1" >&2; exit 1;;
esac
done
shift
# Process non-option arguments.
for arg; do
echo "arg! $arg"
done