O problema está aqui:
if [ -z "MAXFILES" ]
then
MAXFILES=10
fi
# ...
if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]
Você está verificando se a string MAXFILES
é zero. Como não é, $MAXFILES
nunca é definido e, portanto, seu teste posterior é lexing como:
if [ $# -gt "" -a "" -ne 0 ]
É por isso que está reclamando da necessidade de um número inteiro.
O que você quer fazer é isto:
if [[ -z "$MAXFILES" ]]; then
MAXFILES=10
fi
A diferença é o cifrão, que você está perdendo. Além disso, tenho a tendência de usar [[ ]]
em vez de [ ]
para testes (ao usar bash
), pois eles têm algumas verificações de sanidade incorporadas e são mais versáteis do que [
e test
.