循环遍历文件bash脚本

时间:2012-03-13 01:34:58

标签: bash unix cygwin

我正在尝试在所有文件脚本中运行一个简单的循环,但它给了我以下错误。该脚本名为test.sh,我在Windows 7上使用Cygwin。

我的剧本:

#!/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格式。

5 个答案:

答案 0 :(得分:4)

尝试:

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

谢谢!

布兰登

答案 1 :(得分:2)

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

这个脚本有两个问题:

  • 该脚本仍然具有Windows行结尾(这是\r所指的内容;它是Windows在其行结尾中的字符,但Unix没有)。 bcarlso pointed that one out。在脚本上运行dos2unix以对其进行排序。

  • 在bash脚本中分配变量时,=符号周围不能有空格。 scibuff caught 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/*"
    

答案 2 :(得分:1)

尝试

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

即。 '='

周围没有空格

答案 3 :(得分:0)

尝试使用find-command

for i in `find /bow.../ -type f`
do
  echo "hello world"
done

因为ls也会返回目录。

http://infofreund.de/bash-loop-through-files/

答案 4 :(得分:0)

我有同样的错误:

./ test.sh:第2行:FILES:找不到命令 ./test.sh:第4行:意外令牌$'do\r'' ./test.sh: line 4: 做附近的语法错误

在Windows上运行时,通过将Cygwin上的“ CR LF”端线更改为“ LF”来修复它

相关问题