我正在尝试在所有文件脚本中运行一个简单的循环,但它给了我以下错误。该脚本名为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格式。
答案 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也会返回目录。
答案 4 :(得分:0)
我有同样的错误:
./ test.sh:第2行:FILES:找不到命令 ./test.sh:第4行:意外令牌
$'do\r'' ./test.sh: line 4:
做附近的语法错误
在Windows上运行时,通过将Cygwin上的“ CR LF”端线更改为“ LF”来修复它