Bueno, eso es estrecha, pero hay que terminar el if
con fi
.
Además, if
simplemente ejecuta un comando y ejecuta el código condicional si el comando tiene éxito (sale con el código de estado 0), que grep
hace solo si encuentra al menos una coincidencia. Así que no es necesario para comprobar la salida:
if ls | grep -q log; then echo "there are files of type log"; fi
Si estás en un sistema con una versión más antigua o no de GNU grep
que no admite la opción -q
("silencioso"), se se puede lograr el mismo resultado mediante la reorientación de su producción a /dev/null
:
if ls | grep log >/dev/null; then echo "there are files of type log"; fi
Pero desde ls
también devuelve distinto de cero si no encuentra un archivo especificado, se puede hacer lo mismo sin la grep
en absoluto, como en D Respuesta de .Shawley:
if ls *log* >&/dev/null; then echo "there are files of type log"; fi
También puede hacerlo utilizando sólo la cáscara, sin ni siquiera ls
, aunque es un poco más prolijo:
for f in *log*; do
# even if there are no matching files, the body of this loop will run once
# with $f set to the literal string "*log*", so make sure there's really
# a file there:
if [ -e "$f" ]; then
echo "there are files of type log"
break
fi
done
Mientras usted está utilizando fiesta específicamente, se puede establecer la opción nullglob
para simplificar que algo:
shopt -s nullglob
for f in *log*; do
echo "There are files of type log"
break
done
http://mywiki.wooledge.org/BashFAQ/004 ("¿Cómo puedo verificar si un directorio está vacío o no? ¿Cómo puedo verificar cualquier archivo * .mpg, o coun ¿Cuántos hay? ") es de alguna manera relevante para el problema inmediato que tenemos entre manos. –