我试图从 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。