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:
- 您的脚本中有回车 returns;生成 "not found" 消息,这可能是生成
if
的两个分支的原因。
- 您的日期可以作为字符串进行比较,无需使用
-eq
将它们作为数字进行比较。
我正在尝试学习更多 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:
- 您的脚本中有回车 returns;生成 "not found" 消息,这可能是生成
if
的两个分支的原因。 - 您的日期可以作为字符串进行比较,无需使用
-eq
将它们作为数字进行比较。