bash中的IF / ELSE语句

时间:2014-08-05 13:58:36

标签: bash if-statement

有人可以就此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之后。

问题出在哪里?

3 个答案:

答案 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