O operador de comparação -ne
é um operador aritmético , ou seja, compara apenas inteiros:
i=7
if [ "$i" -ne 6 ] && [ "$i" -ne 8 ]; then
echo 'i is neither 6 nor 8'
fi
Para comparar strings por desigualdade, use !=
:
if [ "$filename" != 'even' ] && [ "$filename" != 'odd' ]; then
printf '%s\n' "$filename"
fi
Ou usando case
:
case "$filename" in
even|odd) ;;
*) printf '%s\n' "$filename"
esac
Observe também que *
corresponderá a qualquer nome no diretório atual, não apenas a nomes de arquivos regulares. Para ter certeza de que você processa apenas arquivos regulares em seu loop, use
for name in *; do
test -f "$name" || continue
# other code here using "$name"
done
test -f "$name"
pode ser substituído por
if [ ! -f "$name" ]; then
continue
fi
ou apenas
[ ! -f "$name" ] && continue
ou
[ -f "$name" ] || continue
A instrução continue
pula para a próxima iteração do loop.