【发布时间】:2016-06-01 14:21:40
【问题描述】:
我是 Unix 环境中编程的初学者,我在开始时遇到了一些困难。我在 Windows 上使用 PUTTY。 这是我的脚本和代码,但是当我运行它时,它告诉我
需要整数表达式
#!/bin/bash
hour='date|cut-c12-13'
if [ $hour -ge 0 -a $hour -lt 12 ]; then
echo "good morn"
elif [ $hour -lt 18 ]; then
echo "good afternoon"
else
echo "good night"
fi
它似乎与管道或其他东西无法正常工作;我认为它不会将“日期”翻译为原始日期,而是将其视为一个词。
【问题讨论】:
-
另外,在当前版本的 POSIX 规范中,使用
-a作为“与”运算符已被明确标记为过时。如果您想与 POSIX 兼容,请改用[ "$hour" -ge 0 ] && [ "$hour" -lt 12 ],或者使用(( hour >= 0 && hour < 12 ))来利用现代(更具可读性)特定于 bash 的语法。 -
...请参阅pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html 了解 POSIX 测试的规范;
-a和-o旁边的OB标志将它们标记为过时,XSI标志将它们标记为基线 POSIX 标准的扩展(因此并非所有系统都需要从一开始就支持它们)。 -
(哦 -- 引用很重要;
[ $hour -ge 0 ]和[ "$hour" -ge 0 ]不是一回事:后者在许多常见情况下允许更好的错误消息,并防止在更罕见的集合中出现完全错误的结果条件。shellcheck.net 会为您发现各种错误)。 -
当然你会想要
hour=$(date +'%H)'而不是使用cut...而且你似乎不太可能得到一个负小时,所以小于零的测试也有点奇怪。
标签: shell unix syntax-error