大于/小于的多个 -a 中断 bash 脚本

发布于 2024-12-26 04:05:14 字数 478 浏览 0 评论 0原文

我编写了一个 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 的问题?

I wrote a bash script that performs a curl call only during business hours. For some reason, the hourly comparison fails when I add an "-a" operator (and for some reason my bash does not recognize "&&").

Though the script is much larger, here is the relevant piece:

HOUR=`date +%k`

if [ $HOUR > 7 -a $HOUR < 17 ];
then
  //do sync
fi

The script gives me the error:

./tracksync: (last line): Cannot open (line number): No such file

However, this comparison does not fail:

if [ $DAY != "SUNDAY" -a $HOUR > 7 ];
then
  //do sync
fi

Is my syntax wrong or is this a problem with my bash?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

美人如玉 2025-01-02 04:05:14

您不能在 bash 脚本中使用 <> 。使用 -lt-gt 来实现:

if [ $HOUR -gt 7 -a $HOUR -lt 17 ]

<> 由 shell 使用来执行重定向标准输入或标准输出。

您所说的有效比较实际上是在当前目录中创建一个名为 7 的文件。

至于 &&,它对于 shell 也有特殊的含义,用于创建命令的“AND 列表”。

所有这些的最佳文档:man bash(以及 man test 有关比较运算符的详细信息)

You cannot use < and > in bash scripts as such. Use -lt and -gt for that:

if [ $HOUR -gt 7 -a $HOUR -lt 17 ]

< and > are used by the shell to perform redirection of stdin or stdout.

The comparison that you say is working is actually creating a file named 7 in the current directory.

As for &&, that also has a special meaning for the shell and is used for creating an "AND list" of commands.

The best documentation for all these: man bash (and man test for details on comparison operators)

哥,最终变帅啦 2025-01-02 04:05:14

这里有一些答案,但它们都没有推荐实际的数字背景。

以下是在 bash 中执行此操作的方法:

if (( hour > 7 && hour < 17 )); then
   ...
fi

请注意,不需要“$”来扩展数字上下文中的变量。

There are a few answers here but none of them recommend actual numerical context.

Here is how to do it in bash:

if (( hour > 7 && hour < 17 )); then
   ...
fi

Note that "$" is not needed to expand variables in numerical context.

夜吻♂芭芘 2025-01-02 04:05:14

我建议您在变量引用和“标准”运算符周围使用引号:

if [ "$HOUR" -gt 7 -a "$HOUR" -lt 17 ]; ...; fi

I suggest you use quotes around variable references and "standard" operators:

if [ "$HOUR" -gt 7 -a "$HOUR" -lt 17 ]; ...; fi
不…忘初心 2025-01-02 04:05:14

尝试使用 [[ 代替,因为它更安全并且具有更多功能。还可以使用 -gt-lt 进行数字比较。

if [[ $HOUR -gt 7 && $HOUR -lt 17 ]]
then
    # do something
fi 

Try using [[ instead, because it is safer and has more features. Also use -gt and -lt for numeric comparison.

if [[ $HOUR -gt 7 && $HOUR -lt 17 ]]
then
    # do something
fi 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文