BASH Programa para remover arquivos, expressão inteira esperada

1
#
# if MAXFILES is not set, set to 10
#

if [ -z "MAXFILES" ]
then
        MAXFILES=10
fi

#
# now check to see if the number of files being removed is > MAXFILES
# but only if MAXFILES = 0
#

if [ $# -gt "$MAXFILES" -a "$MAXFILES" -ne 0 ]
then
        # if it is, prompt user before removing files
        echo "Remove $# files (y/n)? \c"
        read reply
        if [ "$reply" = y ]
        then
                rm "$@"
        else
                echo "files not removed"
        fi
else
        # number of args <= MAXFILES
        rm "$@"
fi

O programa acima eu tenho que remover arquivos. No entanto, quando eu tento executá-lo, está me dizendo que

linha 15: [:: expressão inteira esperada

    
por Dport86 02.12.2014 / 17:26

1 resposta

2

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 .

    
por 02.12.2014 / 18:39

Tags