El operador de comparación -ne
es un operador aritmético , es decir, compara solo números enteros:
i=7
if [ "$i" -ne 6 ] && [ "$i" -ne 8 ]; then
echo 'i is neither 6 nor 8'
fi
Para comparar cadenas para la desigualdad, use!=
:
if [ "$filename" != 'even' ] && [ "$filename" != 'odd' ]; then
printf '%s\n' "$filename"
fi
O, usandocase
:
case "$filename" in
even|odd) ;;
*) printf '%s\n' "$filename"
esac
También tenga en cuenta que *
coincidirá con cualquier nombre en el directorio actual, no solo con los nombres de los archivos normales. Para asegurarse de que solo procesa archivos regulares en su ciclo, use
for name in *; do
test -f "$name" || continue
# other code here using "$name"
done
test -f "$name"
puede ser reemplazado por
if [ ! -f "$name" ]; then
continue
fi
o simplemente
[ ! -f "$name" ] && continue
o
[ -f "$name" ] || continue
La declaración continue
salta a la siguiente iteración del ciclo.