sh shell条件和输出“:not found:”

时间:2016-06-03 15:22:15

标签: shell unix sh freebsd

我正在尝试学习更多shell脚本。这台机器上的可用shell是/ bin / sh,/ bin / csh和/ bin / tcsh,sh是默认的并在这里使用。操作系统是FreeBSD 9.1-RELEASE。

我当前的项目需要检查进程昨天是否更新了数据库。前两个回波就在那里,验证变量是否符合我的想法。

#!/bin/sh
lastcheck=$(mysql -h dbserver.mysite.com -u myuser -pmypass mydb -se "SELECT MAX(DATE_FORMAT(datetime_sent_to_fulfiller,'%Y%m%d')) FROM print_mailing_request;"|cut -f1)
yesterday=$(echo -e "$(TZ=GMT+30 date +%Y%m%d)\n$(TZ=GMT+20 date +%Y%m%d)" | grep -v $(date +%Y-%m-%d) | tail -1)

echo "previous day was $yesterday"
echo "we last checked on $lastcheck"

if [ "$lastcheck" -eq "$yesterday" ]; then 
    echo "cool" 
else
    echo "uncool"  
fi;

一个问题是: not found:输出出现的原因以及如何预防?

另一个问题是为什么'酷'和'不酷'都被回应?

最后一个问题是为什么'else'被回应?

$ /bin/sh pmr.cron.sh
: not found:
previous day was 20160602
we last checked on 20160602
: not found:
: not found:
cool
: not found: else
uncool
: not found:

1 个答案:

答案 0 :(得分:1)

  1. 您的脚本中有回车符;这会生成“未找到”消息,这可能是您if的两个分支都生成的原因。
  2. 您的日期与字符串相当,无需使用-eq将其作为数字进行比较。