James H. H. Lampert:
Could it be that cron
is running it an entirely
different shell, that doesn't understand the if
statement?
Despite what others have said, the answer to this question is
no. Whilst you are running two different shells, the
problem is not the if
statement. Both of those
shells understand that if
statement. The difference
between the shells involves the fact that you have assumed a
particular exit status for the cd
command for
non-existent directories. That's the exit status that the cd
command results in, in one of your shells. But it is not the exit
status that results in the other.
Ironically, you are using the [
command anyway,
and that command has a direct method, its -d
operator, for testing for the non-existence of a directory. So
you are going around the houses a bit in order to achieve what you
could be achieving directly, and portably (without assumptions
about exit statuses), with the [
command itself.