Ответ 1
Вы должны использовать внешнюю утилиту getopt
, если вы хотите поддерживать длинные параметры. Если вам нужно только поддерживать короткие варианты, лучше использовать Bash встроенный getopts
.
Вот пример использования getopts
(getopt
не слишком отличается):
options=':q:nd:h'
while getopts $options option
do
case $option in
q ) queue=$OPTARG;;
n ) execute=$FALSE; ret=$DRYRUN;; # do dry run
d ) setdate=$OPTARG; echo "Not yet implemented.";;
h ) error $EXIT $DRYRUN;;
\? ) if (( (err & ERROPTS) != ERROPTS ))
then
error $NOEXIT $ERROPTS "Unknown option."
fi;;
* ) error $NOEXIT $ERROARG "Missing option argument.";;
esac
done
shift $(($OPTIND - 1))
Не то, чтобы ваш первый тест всегда показывал результат true
и создавал файл с именем "1" в текущем каталоге. Вы должны использовать (в порядке предпочтения):
if (( $# > 1 ))
или
if [[ $# -gt 1 ]]
или
if [ $# -gt 1 ]
Кроме того, для назначения вы не можете иметь пробелы вокруг знака равенства:
foo=1