shell 脚本中的 while 循环在 linux bash shell 中不起作用
While loop in shell script not working in the linux bash shell
我是在 linux 中编写 shell 脚本的新手。它是一个 csh
脚本,但是 运行 它在 bash
shell 中,这就是为什么我使用 #!/bin/bash
而不是 #!/bin/csh
.
1 #!/bin/bash
2 set i = 1
3 echo it starts
4
5 while ($i <= 5)
6 echo i is $i
7 @ i= $i +1
8 end
**注意:**数字只是为了给行编号。
上面的代码给出了错误的输出:
it starts
./me.csh: line 9: syntax error: unexpected end of file
即使它回显 it starts
并且没有错误中指定的第 9 行,我也无法找出问题所在。
试试这个:
#!/bin/bash
echo it starts
i=1
while [ $i -le 5 ]; do
echo i is $i
i=$(( i+1 ))
done
示例输出:
it starts
i is 1
i is 2
i is 3
i is 4
i is 5
这里有一个很好的参考:
shebang 必须设置为应该解释脚本的 shell。您 运行 来自哪个 shell 脚本并不重要。唯一重要的是编写脚本的语言。
您的脚本是用 csh
编写的,因此必须有 shebang #!/bin/csh
。即使您想从 bash 运行 它也是如此。此外,您在签名中遗漏了 space:
$ cat me.csh
#!/bin/csh
set i = 1
echo it starts
while ($i <= 5)
echo i is $i
@ i = $i + 1
end
输出:
$ ./me.csh
it starts
i is 1
i is 2
i is 3
i is 4
i is 5
您应该使用 Visual Studio 带有一些扩展的代码来检查 bash 脚本语法。我在 Window 10 WSL2 中使用 Vscode 到 运行 bash 脚本。
将 (...) 更改为 ((...)) 以修复错误语法:
#!/bin/bash
a=5
while ((a > 0)); do
echo "a = $a"
a=$((a - 1))
done
我是在 linux 中编写 shell 脚本的新手。它是一个 csh
脚本,但是 运行 它在 bash
shell 中,这就是为什么我使用 #!/bin/bash
而不是 #!/bin/csh
.
1 #!/bin/bash
2 set i = 1
3 echo it starts
4
5 while ($i <= 5)
6 echo i is $i
7 @ i= $i +1
8 end
**注意:**数字只是为了给行编号。
上面的代码给出了错误的输出:
it starts ./me.csh: line 9: syntax error: unexpected end of file
即使它回显 it starts
并且没有错误中指定的第 9 行,我也无法找出问题所在。
试试这个:
#!/bin/bash
echo it starts
i=1
while [ $i -le 5 ]; do
echo i is $i
i=$(( i+1 ))
done
示例输出:
it starts
i is 1
i is 2
i is 3
i is 4
i is 5
这里有一个很好的参考:
shebang 必须设置为应该解释脚本的 shell。您 运行 来自哪个 shell 脚本并不重要。唯一重要的是编写脚本的语言。
您的脚本是用 csh
编写的,因此必须有 shebang #!/bin/csh
。即使您想从 bash 运行 它也是如此。此外,您在签名中遗漏了 space:
$ cat me.csh
#!/bin/csh
set i = 1
echo it starts
while ($i <= 5)
echo i is $i
@ i = $i + 1
end
输出:
$ ./me.csh
it starts
i is 1
i is 2
i is 3
i is 4
i is 5
您应该使用 Visual Studio 带有一些扩展的代码来检查 bash 脚本语法。我在 Window 10 WSL2 中使用 Vscode 到 运行 bash 脚本。
将 (...) 更改为 ((...)) 以修复错误语法:
#!/bin/bash
a=5
while ((a > 0)); do
echo "a = $a"
a=$((a - 1))
done