Unix变量声明

时间:2014-01-22 12:37:17

标签: shell variables unix scripting grep

您好我是shell脚本编写的初学者。

我有一个名为logA.log的日志文件和一个B.sh文件。

在日志文件中有一些行,我想通过执行B.sh

找到该日志中的特定单词的编号(在最后10行中)

在B中我写了

#!/bin/bash

variableString = tail -10f /home/appuser/logA.log

grep ERROR $variableString | wc -l

但输出为:

  

variableString:找不到命令

我知道“grep”行正在运行,但我无法访问logA in b.sh

如何将名为variableString的变量定义为logA

的最后10行

2 个答案:

答案 0 :(得分:2)

您的命令没问题,但您必须了解存储命令输出的方法:var=$(command)。此外,您可能会获得多行,因此请引用return命令以保留格式。因此,您应该使用:

variableString="$(tail -10f /home/appuser/logA.log)"
grep ERROR "$variableString" | wc -l

当您收到错误时

  

variableString:找不到命令

这是因为在定义语法时,bash解释必须使用variableString参数执行= tail -10f /home/appuser/logA.log命令。有关此问题的详细信息,请参阅Basic bash script variable declaration - command not found

答案 1 :(得分:1)

  • tail -f(“关注”)无法完成,因此它永远不会到达下一行。您可能需要tail -n 10-n使其成为POSIX compatible)。
  • 分配变量时,不能在等号周围使用空格。
  • 变量被分配给右侧评估的字符串。如果没有特殊结构,结果将只是等号后面的文字字符串
  • 您应该quote变量以避免扩展。

总之,您应该使用:

variableString=$(tail -10 /home/appuser/logA.log)