Quoting Eirik Schwenke (ei...@schwenke.info): > Then there was a different change, to do numerical comparison against date > +%%s. I think the new code contains two errors: a) it should be: > > NOW="$(date +%s)"; > > At least my date complains that % isn't a valid number if "+%%s" is used. > Probably a simple typo. > > In the case that no wake-alarm is set; WAKEALARM will be the empty string and > dash (and bash) will complain that an integer expression is expected. As far > as I can tell adding a test for the empty string (-z) and chaining with > logical-or (-o) will *not* work: > > a="" > if [ -z "${a}" -o 10 -ge "${a}" ]
bash and dash both support default values for unset/null parameters, so you can write ${a:-0} or whatever. ${parameter:-word} Use Default Values. If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted. You can only dodge a syntax error by a short-circuiting OR; leaving it until you evaluate the test is too late. Thus if [ ... ] || [ ... bad syntax here ... ] then would work but I wouldn't use that construction here. It's really designed for cases where evaluating the second test would cause an undesired side-effect. Cheers, David.