>Есть задача, интерпретировать аргументы с котороми запущен скрипт, в некие сущности. Вот мой вариант:
#!/bin/sh
ARG1=
ARG2=
ARG3=
if [ $# -eq 0 ]; then
echo "Usage: $0 --list [--all] [--kilo]" >&2
exit 1
fi
if [ $# -gt 0 ]; then
while [ $# -gt 0 ]; do
if [ "$1" = "--list" ]; then
ARG1="-l"
elif [ "$1" = "--kilo" ]; then
ARG2="-h"
elif [ "$1" = "--all" ]; then
ARG3="-a"
fi
shift
done
fi
printf 'ARG1 = %s\n' $ARG1
printf 'ARG2 = %s\n' $ARG2
printf 'ARG3 = %s\n' $ARG3
>Запуск сценария ls.sh (точнее его работа) допустима только с параметром:
>$ ./ls.sh --list
У меня не проверяется, чтобы --list был всегда и обязательно, но это нетрудно сделать.
>Но также возможен и запуск с:
>$ ./ls.sh --list --all --kilo или
>$ ./ls.sh --list --kilo
>$ ./ls.sh --list --all
>$ ./ls.sh --list --kilo --all
coder@alt0 ~ $ ./test.sh
Usage: ./test.sh --list [--all] [--kilo]
coder@alt0 ~ $ ./test.sh --list
ARG1 = -l
ARG2 =
ARG3 =
coder@alt0 ~ $ ./test.sh --list --all --kilo
ARG1 = -l
ARG2 = -h
ARG3 = -a
coder@alt0 ~ $ ./test.sh --list --kilo
ARG1 = -l
ARG2 = -h
ARG3 =
coder@alt0 ~ $ ./test.sh --list --all
ARG1 = -l
ARG2 =
ARG3 = -a
coder@alt0 ~ $ ./test.sh --list --kilo --all
ARG1 = -l
ARG2 = -h
ARG3 = -a
coder@alt0 ~ $
getopt/getopts это хорошо, но в таких простых случаях можно и без него обойтись :)