
Estoy escribiendo un script bash simple para hacer lo siguiente:
1) Verifique dos archivos (foo1 y foo2).
2) Si foo1 es diferente de foo2 y foo1 NO está en blanco, envíe un correo electrónico.
3) Si foo1 es igual que foo2... o foo1 está en blanco... no hagas nada.
La condición en blanco es lo que me confunde. Esto es lo que tengo para empezar:
diff --brief <(sort ./foo1) <(sort ./foo2) >/dev/null
comp_value=$?
if [ $comp_value -ne 0 ]
then
mail -s "Alert" [email protected] <./alertfoo
fi
Obviamente, esto no busca contenidos en blanco. ¿Alguna idea sobre cómo hacer eso?
Respuesta1
Puede usar el -s
operador de la prueba para verificar si el archivo está vacío y, cmp
generalmente, es la forma más sencilla de verificar la igualdad de los archivos (tenga en cuenta que puede usar un comando directamente en una if
declaración como una alternativa más simple a comparar su estado de salida con 0). Me quedo con la parte en la que ordenas los dos archivos antes de compararlos; si eso no es necesario, simplemente use los dos archivos directamente como argumentos para cmp
.
if [ -s ./foo1 ] && ! cmp -q <(sort ./foo1) <(sort ./foo2); then
...
Puede leer lo anterior como: "si ./foo1 no está vacío ( [ -s ... ]
) Y ( &&
) las formas ordenadas de ./foo1 y ./foo2 NO son ( !
) iguales ( cmp
)".
Respuesta2
Puedes usar -s para comprobar si un archivo está vacío:
if [[ -s $FILE ]] ; then
echo "$FILE has data."
else
echo "$FILE is empty."
fi
Si desea saber si una cadena está vacía o no, use la opción -z para verificar si está vacía:
STRING="test"
if [[ -n "$STRING" ]]; then
echo "String is not empty"
fi
o -n para comprobar si no está vacío:
STRING=""
if [[ -z "$STRING" ]]; then
echo "String is empty"
fi