4

我对这个 Bash/Shell 的东西很陌生,并且必须为 uni 分配做一些网络分析。

只是试图做一个简单的循环,但得到一个奇怪的错误,尽管 2 小时的谷歌抓取仍然无法修复:

#!/bin/bash
x=1
while [ $x -le 5 ]
do
  echo "Welcome $x times"
  x=$(( $x + 1 ))
done

我尝试使用以下语法使用 for 循环:

#!/bin/bash
for i in {1..5}
do
   echo "Welcome $i times"
done

每当我将第一个脚本放在我的服务器上时,我都会收到以下消息:

./temp.sh: line 8: syntax error: unexpected end of file

在运行此文件之前,我执行了以下命令来添加权限并使文件可执行:

ls -l temp.sh
chmod +x temp.sh

顺便说一句,我发现了以下关于循环的 stackoverflow 问题,复制了“固定代码”并得到了同样的错误:循环一个 Bash Shell 脚本

我正在运行版本 4+ 并使用 G-VIM 作为 Windows 7 上的文本编辑器。有人有什么想法吗?

设法解决了这个问题:

鉴于我的声誉仍然太低,我目前无法自己回答这个问题,所以为了阻止人们在那里浪费时间,我是这样解决的:

好的,我已经设法解决了这个问题,所以将把它留给其他任何环顾四周的人。

我的问题是我使用 FileZilla 连接到我的服务器。似乎即使我使用 WinVi 或 G-Vim 创建文件,当我将文件传输到服务器时,FileZilla 也会在文件末尾添加某种形式的额外字符,因为我正在运行 Windows。

我切换到 WinSCP 作为我的连接代理并尝试了它,嘿 presto 工作正常。

感谢其他答案。

刘易斯

4

4 回答 4

2

在运行 bash 脚本之前,在其上使用 dos2unix 命令

dos2unix <bashScript>
./<bashScript>
于 2012-03-04T15:07:09.397 回答
1

好的,我已经设法解决了这个问题,所以将把它留给其他任何环顾四周的人。

我的问题是我使用 FileZilla 连接到我的服务器。似乎即使我使用 WinVi 或 G-Vim 创建文件,当我将文件传输到服务器时,FileZilla 也会在文件末尾添加某种形式的额外字符,因为我正在运行 Windows。

我切换到 WinSCP 作为我的连接代理并尝试了它,嘿 presto 工作正常。

于 2014-11-24T10:01:27.263 回答
0

后面有换行符done吗?这可能是麻烦的原因。

它是否适用bash于您机器上的 Cygwin?(它应该;当复制到我的 Mac 时,它可以正常工作,例如,使用任何shbashksh运行它。)

于 2012-03-04T15:07:01.863 回答
0

我也遇到了这个问题。实际上,这个问题的解决方案是在编辑菜单中编写脚本检查 EOL 转换是否为 Unix 格式。它应该是 Unix 格式的 shell 脚本。

于 2013-08-31T08:19:13.923 回答