O getopts
builtin só pode manipular opções de caractere único; você tem que usar algo como
getopts 's:e:h'
Eu também coloquei os dois-pontos depois de h
, já que você provavelmente não quer um argumento para -h
.
Eu tenho um script:
#!/bin/sh
function usage() {
cat << EOF >&2
Usage: $0 [-h] [-rs <start_num>] [-re <end_num>]
-h: help: displays list of options for command $0
-rs<int>: range start: should be the number to go from - the lower of the two ranges. <int>
-re<int>: range end: should be the number to add up to - the highest of the two ranges. <int>
EOF
exit 1
}
function addition() {
sum=0
for number in "$@"; do
sum=$(( sum + number))
done
# set defaults
rangeStart=0
rangeEnd=0
error=false
# loop arguments
OPTIND=1
while getopts rs:re:h: o; do
case $o in
rs) rangeStart=$OPTARG;;
re) rangeEnd=$OPTARG;;
h) usage;;
*) error=true;;
esac
done
shift $((OPTIND - 1))
echo $rangeStart
echo $rangeEnd
if [ "$error" = true ] ; then
echo 'Invalid argument passed. See addition -h for usage.'
else
echo 'Total: '$sum
fi
}
No momento, estou apenas tentando adicionar argumentos de comando para que o usuário possa digitar:
$ addition -rs 4 -re 10
e faz um loop de 4 a 10 (adicionando 4 + 5 + 6 + 7 + 8 + 9 + 10
) e produz o total.
mas fazendo o acima, retorna a saída de:
0
0
Invalid argument passed. See addition -h for usage.
por isso não está reconhecendo meus parâmetros. E quando eu alterar o comando para:
$ addition -rs4 -re10
gera o mesmo .. o que estou fazendo errado no meu script?
O getopts
builtin só pode manipular opções de caractere único; você tem que usar algo como
getopts 's:e:h'
Eu também coloquei os dois-pontos depois de h
, já que você provavelmente não quer um argumento para -h
.