sh shell 条件和输出“:未找到:”

sh shell conditionals and output ": not found:"

我正在尝试学习更多 shell 脚本。这台机器上可用的 shell 是 /bin/sh、/bin/csh 和 /bin/tcsh,这里默认使用 sh。 OS 是 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: 输出,我该如何防止它出现?

另一个问题是为什么 'cool' 和 'uncool' 都被回显了?

最后一个问题是为什么要回应 '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. 您的脚本中有回车 returns;生成 "not found" 消息,这可能是生成 if 的两个分支的原因。
  2. 您的日期可以作为字符串进行比较,无需使用 -eq 将它们作为数字进行比较。