linux shell脚本中for循环的语法

Posted

技术标签:

【中文标题】linux shell脚本中for循环的语法【英文标题】:syntax of for loop in linux shell scripting 【发布时间】:2011-08-03 09:17:01 【问题描述】:

我在实现 for 循环时遇到问题。执行脚本时出现此错误

test1.sh: 2: 语法错误:循环变量错误

我不明白这个错误。

这是我的脚本

#!/bin/bash
for (( c=1; c<=5; c++ ))
do
echo "Welcome $c times..."
done

谁能告诉我 ubuntu 中 sh 中 for 循环的语法(在 ubuntu 中它链接到 dash shell)shell?

【问题讨论】:

我没有收到与您相同的错误 - 我收到意外的文件结尾。无论如何,你少了一个分号。 这对我有用。您可能在文本中隐藏了一个奇怪的字符。 对于 bash,语法似乎很好。你能试着确保你运行的是正确的 shell 吗? ls -l /bin/bash,也许? 当您将 done 语句放在单独的行上时,这对我有用。 我使用 sh 而不是 bash 运行它。在 bash 中运行良好。谢谢大家。 【参考方案1】:

您可能使用sh 运行它,而不是bash。试试bash test1.sh,或者./test1.sh,如果它是可执行的,但不是sh test1.sh

【讨论】:

在 bash 中工作正常,如帖子中当前显示的那样 克里林:你说得对。我使用 sh 而不是 bash 或“./”来运行它。现在效果很好。谢谢 Yes 在 bash 中可以正常工作。使 sh 指向 bash(符号链接)!【参考方案2】:

标准 POSIX shell 只接受语法for varname in list

类似 C 的 for 循环语法 for (( expr1; expr2; expr3 )) 是一种 bashism。

您可以使用 for c in $(seq 1 5) 在标准 POSIX shell 中获得类似的行为

【讨论】:

【参考方案3】:

是什么

ls -l /bin/sh

给你的机器?

sh 设为bash 的符号链接,然后您就可以使用sh ./test1.sh

【讨论】:

【参考方案4】:

您的 shell 脚本(如图所示)在 Korn shell 和 Bash 中运行。一些想法:

在 shebang 之后可能需要一个空格(#!/bin/bash 而不是 #!/bin/bash)。但是,Dennis Ritchie 最初指定空格是可选。此外,这不是您使用 Bourne shell 时遇到的错误(您会收到 syntax error: '(' unexpected)。 您使用的是 Windows 系统吗?只是在黑暗中刺伤。这看起来不像是 Windows 错误。 这是 Solaris 还是 HP/UX 系统?他们可能没有运行真正版本的 Bash,或者可能不是旧版本。但是,即使是最旧版本的 Bash 也可以识别 for ((x;y;z)) 构造。

试试这个:

#! /bin/bash
set -vx
echo "Random = $RANDOM"   #Test for bash/Kornshell. Will be blank in other shells
echo \$BASH_VERSINFO[0] = $BASH_VERSINFO[0] #Should only work in BASH
echo \$BASH_VERSINFO[1] = $BASH_VERSINFO[1]
echo \$BASH_VERSINFO[2] = $BASH_VERSINFO[2]
echo \$BASH_VERSINFO[3] = $BASH_VERSINFO[3]
echo \$BASH_VERSINFO[4] = $BASH_VERSINFO[4]
echo \$BASH_VERSINFO[5] = $BASH_VERSINFO[5]
for ((c=0, c<=5, c++))
do
    echo "Welcome $c times"
done
set -xv 将在执行时显示所有行。 $RANDOM 应该显示一个值,如果它是 BASH 或 Kornshell(您的 for 循环将在任何一个中工作)。 $BASH_VERINFO[x] 只有在真正是 BASH 时才应设置。即使您在 BASH 中运行 Korn shell,也不会设置这些(不像 $SHELL 仍然包含 bash)。

如果 for 循环仍然给您带来麻烦,请将其删除。在这个脚本的某个地方,我们会发现你是否真的在执行 bash shell。

【讨论】:

以上是关于linux shell脚本中for循环的语法的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习总结(五十九)shell 脚本3-for while 循环

linux_shell 编程学习-初识she'll

shell中的for循环出现语法错误(syntax error: bad for loop variable)

linux12shell编程 -->流程控制之for循环1

Linux Shell编程 循环语法

shell脚本编程学习笔记-for循环