Linux bash脚本中awk命令中的括号不匹配导致语法错误

Linux bash脚本中awk命令中的括号不匹配导致语法错误,linux,bash,if-statement,awk,Linux,Bash,If Statement,Awk,这是我编译并运行文件后遇到的错误 ./skript05.sh: 13: ./skript05.sh: Syntax error: word unexpected (expecting ")") 下面是代码的重要片段,指出了第13行。我不认为代码的其余部分是必要的,因为它工作得很好,但如果是,请让我知道 ls -l $1 | awk " if($1 ~ /-([r-][w-][x-]){3}/) { MUCHLINES=$(system(\"egrep -o \

这是我编译并运行文件后遇到的错误

./skript05.sh: 13: ./skript05.sh: Syntax error: word unexpected (expecting ")")
下面是代码的重要片段,指出了第13行。我不认为代码的其余部分是必要的,因为它工作得很好,但如果是,请让我知道

ls -l $1 | awk "
    if($1 ~ /-([r-][w-][x-]){3}/) 
    {
        MUCHLINES=$(system(\"egrep -o \"^[a-z ]{1,}$\" \", $9) | wc -l) ;#13
        test -z "$MUCHLINES" && continue ;
        print $9":"$MUCHLINES ;
        >&2 echo "$9":"yes" ;
    }
    else >&2 echo "$9":"no" ;
"
我能理解的是,它忽略了第12行和第17行中的符号{},但我不明白为什么。例如,在gedit中编辑代码时,不会忽略并正确高亮显示所有其他括号

我在Linux上做这个

这几天我一直在寻找答案,但似乎找不到任何答案。如果有,我会道歉并删除这个问题。谢谢你的帮助


(如果您需要知道此代码应该做什么-它应该打印到stdout“(nameoffile):(x)”,其中x是仅由小写字母和空格组成的行数;如果是文件,则打印到stderr“(nameoffile):yes/no”和yes(在
ls-l
中,以
-
作为访问权限中的第一个符号)

@EdW-正如其他人所指出的,您发布的脚本非常混乱,但我认为以下内容可能会对您有所帮助,因为它确实说明了如何将ls、awk和egrep组合到bash脚本中,或多或少地符合您的想法。但是,请注意,它没有解决其他人提出的一些问题,也不打算作为一种模式。它可能甚至不能完全满足你的需求,但我希望它能帮助你实现一些目标

 #!/bin/bash
 ls -l $1 | awk '{print $1, $9}' | while read mask file
    do
    if [[ $mask =~ -([r-][w-][x-]){3} ]] ; then
        MUCHLINES=$(egrep -o "^[a-z ]{1,}$" "$file" | wc -l)
        if [[ $MUCHLINES -gt 0 ]] ; then
          echo "$file:" $MUCHLINES
          >&2 echo "$file:yes"
        else
          >&2 echo "$file:no"
        fi
    fi
    done

大括号周围不需要空格吗?在整个脚本周围使用单引号;那么你就不必在脚本中转义双引号等了。话虽如此(我认为这是一个准确的建议),但我无法确定脚本中显示的哪些部分是Awk,哪些部分是shell。如果我能弄明白你在干什么,我会给你一个答案。整个
if
需要在
{…}
中,因此它匹配Awk的每一行输入。awk不是shell,就像C和Java不是shell一样。获取Arnold Robbins的《有效的Awk编程》第四版和Chris Johnson的《Shell脚本食谱》,但同时,如果您发布一些示例输入和预期输出,在我们告诉您不要尝试解析
ls
(谷歌it)的输出后,有人可以帮助您。编译后的
是什么意思…
?shell和awk是不同的语言,但它们的一个共同点是它们是解释的,而不是编译的!另外,请注意解析
ls
输出容易出错。例如,在Mac上(但也在Linux上),您可以在基本权限之后添加一个额外字符,例如
@
,这样您的正则表达式就不会匹配Mac上的所有文件。文件名中的空格(etc)也有问题。在整个脚本周围使用单引号;那么您就不必在脚本中转义双引号等了。@EdW:谢谢。您是否知道,您可以通过将答案标记为已接受来提高您的“声誉”?看见