2011-05-14 11 views
6

Tengo un script que comprueba si un archivo está actualizado.comparando cadenas en bash

updatedate=`ls -l file | sed -e 's/ */ /g' | cut -d' ' -f7` #cut the modification time 
nowdate=`date +"%H:%M"` 
echo "$updatedate $nowdate" 
if [ "$updatedate"="$nowdate" ] 
then 
    echo 'OK' 
else 
    echo 'NOT OK' 
fi 

Pero cuando lo ejecuto, la comparación siempre es verdadera:

$ ./checkfile 
10:04 10:07 
OK 

$ ./checkfile 
10:07 10:07 
OK 

¿Por qué?

Respuesta

15

Necesita un espacio en cada lado del signo igual.


if [ "$updatedate" = "$nowdate" ] 
2

Debe separar todos los argumentos en test con espacios en blanco. Tal como está, tiene = justo frente a sus dos operandos, por lo que test ve un argumento, no los tres que usted tiene la intención.

+1

[es una abreviatura de prueba, vea http://pubs.opengroup.org/onlinepubs/009695399/utilities/test.html (ese comentario es para el OP);) –