Bash脚本结果

时间:2015-06-27 14:42:02

标签: linux bash sh

有人可以解释一下下面的脚本是什么吗?

#!/bin/bash
for F in *.txt; do
  K=`grep abc $F`
  echo $K
  if ["$K" != ""]; then
        echo $F
  fi
done

我测试了它,当它找到包含“abc”字符串的txt文件时,出现提示

`"./a.sh: line 5: [abc: command not found"`

错误,否则显示不包含“abc”字符串的txt文件的名称。

4 个答案:

答案 0 :(得分:2)

您获得[abc: command not found是因为[之后] if之后for之前没有空格。

您甚至不需要grep -l循环,您可以使用grep -l 'abc' *.txt

doctests

答案 1 :(得分:1)

该脚本应该遍历所有" .txt"当前目录中的文件,为abc grep它们,回显结果,如果找到该字符串,则打印文件名。但是,它有一个语法错误(您需要[]周围的空格),使用空格打破文件名,并且比所需的更复杂。更好的版本是:

#!/bin/bash
for F in *.txt; do
  grep abc "$F" && echo "$F"
done

答案 2 :(得分:0)

[之后留一个空格,在 ]之前留一个空格来解决错误:

#!/bin/bash
for F in *.txt; do
  K=`grep abc $F`
  echo $K
  if [ "$K" != "" ]; then
        echo $F
  fi
done

答案 3 :(得分:0)

您的脚本会遍历当前目录中的所有.txt个文件,以搜索模式并显示匹配的文件名。请参阅本教程http://www.tutorialspoint.com/unix_commands/grep.htm

您的代码在这里有语法错误

if ["$K" != ""]

您需要在[之后和]之前放置一个空格,因此请使用此

if [ "$K" != "" ]