【问题标题】:Unix Variable DeclarationUnix 变量声明
【发布时间】:2014-02-12 12:37:26
【问题描述】:

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

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

在日志文件中有一些行,我想通过执行 B.sh 来查找该日志中特定单词的编号(在最后 10 行)

我在 B 中写道

#!/bin/bash

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

grep ERROR $variableString | wc -l

但输出是:

变量字符串:找不到命令

我知道“grep”行正在工作,但我无法联系到logA in b.sh

如何将名为 variableString 的变量定义为 logA 的最后 10 行

【问题讨论】:

    标签: shell variables unix scripting grep


    【解决方案1】:

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

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

    当你收到错误时

    变量字符串:找不到命令

    这是因为当你定义你的语法时,bash 解释必须执行带有= tail -10f /home/appuser/logA.log 参数的variableString 命令。有关这方面的更多信息,请参阅Basic bash script variable declaration - command not found

    【讨论】:

      【解决方案2】:
      • tail -f ("follow") 不会完成,所以它永远不会到达下一行。您可能指的是tail -n 10-n 变成了POSIX compatible)。
      • 分配变量时不能在等号周围使用空格。
      • 变量分配给右侧计算的字符串。如果没有特殊构造,结果将只是等号后面的文字字符串
      • 您应该quote 变量以避免扩展。

      总之,你应该使用:

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

      【讨论】:

      • 啊,是的,“-f”参数杀了我,谢谢
      猜你喜欢
      • 2016-07-20
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 2012-06-15
      • 2014-11-09
      • 2021-12-16
      • 2021-01-15
      相关资源
      最近更新 更多