2014-10-16 97 views
0

我对我的一些语法墙进行了猛击,我不确定发生了什么问题。我有一个bash脚本,用于在旧版本的Redhat上运行,但由于某种原因,它并未在我们的Linux服务器上运行。在任何情况下,我尝试更新和这里就是我现在有...从bash脚本中的文件中读取行

根据注释建议更新:

#!/bin/bash 
while read -r line; 
do 
    echo "this is species no. $line"; 
done < "$1" 

最终,我会想这是什么做的是这些数字传递的R脚本,但不管现在。它似乎并不喜欢在脚本末尾传递一个文件(我在“意外的令牌附近发生了一个语法错误”),但是当我把它写出来时,它会说“文件意外结束”。这是怎么回事了?

在它的事项,在服务器运行的bash 4.2.25情况。

+7

将'filename =“$ 1”'更改为'filename =“$ 1”'。 bash中的赋值中不能有空格。 – 2014-10-16 17:25:38

+0

另外,在这段代码中实际上并不需要任何变量赋值语句:'while read -r bird;确实回应“这是物种号$鸟”;完成<“$ 1”'。 – chepner 2014-10-16 17:32:21

+0

您还有一些其他语法错误,这些错误在当前发布的代码中不存在。 – chepner 2014-10-16 17:48:17

回答

0

代码的语法是完美的,但我可能会提出一个IFS在那里,丢弃多余的分号。

我怀疑文件中的行结尾是导致错误的,下面的脚本应该处理这个......但确切知道的最好方法是用一个新的小名称测试文件运行脚本。

while IFS= read -r line; do 
    echo "$line" 
done < <(sed 's/^M$//' "$1") 
+0

感谢您的建议 - 我试图相应地更新脚本,但仍然收到错误“语法错误附近出现意外令牌”。考虑到@chepner也不能重现这个错误,我开始怀疑它是不是服务器端的问题。我一直希望我们的部门更新到Tahr,但他们不想花时间在这个上。我只是想知道是否有某种小故障可以通过升级或其他方式解决。 – setophaga 2014-10-16 20:39:04

+0

这最终是一个愚蠢的Windows到Linux的错误:我在Windows中创建文本文件,并没有意识到回车是问题 – setophaga 2015-08-13 20:26:01