为什么这个递增的 for 循环会返回一个错误的变量?

为什么这个递增的 for 循环会返回一个错误的变量?

我试图从 GRASS GIS 的 CLI 中调用这个 shell 脚本:

for (( day=5; day<367; day+5 )); do
  # commands that I've tested without a loop.
done
exit 0

回报

Syntax error: Bad for loop variable

答案1

此错误消息来自。有几个具有类似语法的 shell。 Ash 是一种相对基本的设计,旨在占用内存小且执行速度快。另一种常见的 shell 是重击。 Bash 有更多功能。您发布的语法仅存在于 bash (和其他一些 shell,但不存在 ash)中。

在 ash 中,您需要编写:

day=5
while [ $day -lt 367 ]; do
  day=$((day + 5))
done

请注意,根据 Linux 发行版,/bin/sh是 ash 或 bash(一些外来版本可能使用其他实现)。如果您正在编写使用 bash 语法的脚本,请务必将其放在#!/bin/bash顶部。

假设你的意思是day+=5你写的地方day+5,否则它是一个无限循环。

答案2

也许GRASS GIS预先定义了一个名为“day”的变量?

顺便说一句,该代码在直接 bash 中不起作用。您实际上并没有增加“day”的值。

#!/bin/bash
for (( day=5; day<367; day=day+5 )); do
  # commands that I've tested without a loop.
        echo $day
done
exit 0

这对我有用,在 RHEL 5.0 服务器上使用 bash 2.05b。

相关内容