linux shell脚本中for循环的语法

我有一个执行for循环的问题。 我执行我的脚本时出现此错误

test1.sh:2:语法错误:不适合循环variables

我不明白这个错误。

这是我的脚本

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

任何一个可以告诉我语法for循环在sh(在Ubuntu中,它链接到Dash shell)在Ubuntu的shell?

Solutions Collecting From Web of "linux shell脚本中for循环的语法"

你可能用sh运行而不是bash 。 如果是可执行文件,请尝试bash test1.sh./test1.sh ,而不是sh test1.sh

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

for (( expr1; expr2; expr3 ))的类C语言for循环语法是一种双重语法。

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

什么

 ls -l /bin/sh 

放在你的机器上?

使sh成为bash的符号链接,然后可以执行sh ./test1.sh

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

  • 在shebang之后(#!/ bin / bash而不是#!/ bin / bash)可能需要一个空格。 然而,丹尼斯·里奇本来指定的空间是可选的 。 另外,这不是你用Bourne shell得到的syntax error: '(' unexpected (你会得到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。