2012-03-13 121 views
4

我想通过所有文件脚本运行一个简单的循环,但它给了我以下错误。该脚本称为test.sh,我在Windows上使用Cygwin 7循环浏览文件bash脚本

我的脚本:

#!/bin/bash 
FILES = "/bowtie-0.12.7-win32/bowtie-0.12.7/output_635_25bp/*" 
for f in $FILES 
do 
    echo "hello world" 
done 

的错误是:

./test.sh: line 2: FILES: command not found 
./test.sh: line 4: syntax error near unexpected token ``$'do\r'' 
./test.sh: line 4: ``do 

运行前我在转换文件夹中的所有文件的脚本到使用dos2unix命令的unix格式。

回答

4

尝试:

for f in `ls /bowtie-0.12.7-win32/bowtie-0.12.7/output_635_25bp/*`; do echo "hello world"; done 

谢谢!

布兰登

+0

仍然给我的'/test.sh:4号线:做\ r'错误 – dawnoflife 2012-03-13 01:43:39

+0

嗯...我m运行OSX,所以我不能在Cygwin中尝试它,但将该代码粘贴到我的shell并更改它适用于我的目录。你是否也dos2unix你的test.sh文件? – bcarlso 2012-03-13 01:52:29

+0

哦,我只是这样做,它的工作。谢谢! – dawnoflife 2012-03-13 01:55:42

1

尝试

FILES=/bow.../* 
for f in $FILES 
do 
    echo "hello world" 
done 

即没有空格周围 '='

+0

它仍然给我靠近意外的标记$'德语法错误做\ r' – dawnoflife 2012-03-13 01:38:56

2

将其他人的答案整理成一个答案。

你已经两个问题的脚本:

  • 脚本仍然有Windows行结尾(这是\r指的是什么,它是Windows有其行结束字符,但Unix上没有按” T)。 bcarlso​​。通过脚本运行dos2unix将其排除。

  • 在bash脚本中分配变量时,=标志周围不能有空格。 scibuffcaught that one

    下面将被解释为试图运行命令FILES(不存在)与参数= "/bowtie..."

    FILES = "/bowtie-0.12.7-win32/bowtie-0.12.7/output_635_25bp/*" 
    

    尽管下面被解释为分配"/bowtie..."给变量FILES

    FILES="/bowtie-0.12.7-win32/bowtie-0.12.7/output_635_25bp/*" 
    
+0

另外我会添加[常见警告](http://mywiki.wooledge。org/ParsingLs)来解析'ls'输出。 – suvayu 2012-07-23 05:54:59