我写了一个bash脚本,只在工作时间执行curl调用。出于某种原因,当我添加“-a”运算符时,每小时比较失败(由于某种原因,我的bash无法识别“&&”)。
虽然脚本要大得多,但这是相关部分:
HOUR=`date +%k`
if [ $HOUR > 7 -a $HOUR < 17 ];
then
//do sync
fi
该脚本给出了错误:
./tracksync: (last line): Cannot open (line number): No such file
但是,这种比较不会失败:
if [ $DAY != "SUNDAY" -a $HOUR > 7 ];
then
//do sync
fi
我的语法错了还是我的bash出了问题?
答案 0 :(得分:13)
您不能在bash脚本中使用<
和>
。请使用-lt
和-gt
:
if [ $HOUR -gt 7 -a $HOUR -lt 17 ]
shell使用 <
和>
来执行stdin或stdout的重定向。
您所说的比较实际上是在当前目录中创建名为7
的文件。
对于&&
,它对shell也有特殊含义,用于创建命令的“AND列表”。
所有这些的最佳文档:man bash
(和man test
有关比较运算符的详细信息)
答案 1 :(得分:6)
这里有一些答案,但没有一个推荐实际的数字背景。
以下是如何在bash中执行此操作:
if (( hour > 7 && hour < 17 )); then
...
fi
请注意,在数值上下文中扩展变量不需要“$”。
答案 2 :(得分:0)
我建议你在变量引用和“标准”运算符周围使用引号:
if [ "$HOUR" -gt 7 -a "$HOUR" -lt 17 ]; ...; fi
答案 3 :(得分:0)
请尝试使用[[
,因为它更安全且功能更多。同时使用-gt
和-lt
进行数字比较。
if [[ $HOUR -gt 7 && $HOUR -lt 17 ]]
then
# do something
fi