有人可以就此if
声明提出建议吗?
hour=`date "+%k"`
echo $hour
if [ $hour > 7 ] && [ $hour < 21 ]; then
cd /bill/bscs/SCRIPTS/SMS
sms_not.csh samples.lst "New file has arrived"
else
cd /bill/bscs/SCRIPTS/SMS
sms_not.csh basicList.lst "New file has arrived"
fi
简而言之,如果满足小时要求,脚本应该向某个组发送短信;如果没有,它会将其发送给另一组。
$hour
变量是正确的,我可以用echo $hour
看到它,但由于某种原因它总是执行,不管是在else之后。
问题出在哪里?
答案 0 :(得分:4)
您应该看到一些错误消息。
有关运算符的正确语法,请参阅:man test
<
为-lt
,>
为-gt
。
注意:清理您创建的文件(7
,如果您还没有看到错误消息,21
也是如此)
答案 1 :(得分:3)
在BASH
中,您可以将((...))
用于算术表达式:
if (( hour > 7 && hour < 21 )); then
cd /bill/bscs/SCRIPTS/SMS
sms_not.csh samples.lst "New file has arrived"
fi
答案 2 :(得分:3)
正确的陈述是
if [ "$hour" -gt 7 ] && [ "$hour" -lt 21 ];
使用[
命令,您需要引用参数扩展以防止未设置或空变量,并且必须使用-gt
和-lt
进行整数比较。 (即使对于字符串比较,您也需要引用<
和>
以防止它们被视为重定向运算符。例如:
if [ "$string" \> "cat" ]; then