Bash Getopt принимает несколько параметров
Я пишу скрипт, использующий getopt для анализа длинных и коротких параметров. Решение, которое я имею до сих пор, принимает только один параметр. Есть ли способ заставить это решение принимать несколько параметров (например, "THING" и "COMIC" в примере)?
код:
function usage {
printf "Usage: %s: [-abh c <URL>] [--ape --bean --comic <URL> --help]" >&2
exit 2
}
set -- $(getopt -n$0 -u -a --longoptions="ape bean comic: help" "abc:h" "$@") || usage
[ "$#" -eq 0 ] && usage
while [ "$#" -gt 0 ];do
case "$1" in
# Long options
--ape) THING='ape';shift;;
--bean) THING='bean';shift;;
--comic) COMIC='yes';COMIC_URL="$2";shift;;
--help) usage;break;;
-a) THING='ape';shift;;
-b) THING='bean';shift;;
-c) COMIC='yes';COMIC_URL="$2";shift;;
-h) usage;break;;
--) shift;break;;
-*) usage;;
*) break;;
esac
shift
done
if [ ! -z $THING ]; then
echo "THING:$THING"
fi
if [ $COMIC == 'yes' ]; then
$BROWSER $COMIC_URL || echo "Sorry, could not find your comic!"
fi
1 ответ
Решение
Могут быть и другие проблемы, но я сразу вижу, что вы пишете:
--ape) THING='ape';shift;;
(и аналогично для других случаев), а затем выполните:
shift
после того, как дело сделано. Это означает, что в случае --ape
и во многих других случаях вы shift
вдвоем.
Просто удалите shift
внутри случаев и сделать смену один раз и для каждого случая после esac
,