2011-05-14 6 views
6

J'ai un script vérifiant si un fichier est à la minute.comparer des chaînes dans 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 

Mais quand je le lance, la comparaison est toujours vrai:

$ ./checkfile 
10:04 10:07 
OK 

$ ./checkfile 
10:07 10:07 
OK 

Pourquoi?

Répondre

15

Vous avez besoin d'un espace de chaque côté du signe égal.


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

Vous devez séparer tous les arguments en test avec des espaces. En l'état, vous avez = par rapport à ses deux opérandes, donc test voit un argument, pas les trois que vous avez l'intention.

+1

[est un raccourci pour tester, voir http://pubs.opengroup.org/onlinepubs/009695399/utilities/test.html (ce commentaire est pour l'OP);) –