【问题标题】:BASH: Check output of command for $STRING, if exists then store output as variableBASH:检查 $STRING 的命令输出,如果存在则将输出存储为变量
【发布时间】:2015-08-11 19:53:48
【问题描述】:

背景:

我正在开发一些 OBDII 软件,并尝试通过蓝牙自动执行连接过程。我有一个工作脚本,但我想进一步自动化它,以便它可以在所有 *nix 机器上工作,而不仅仅是我的(现在蓝牙设备的 MAC 手动存储在脚本中)。

我的问题: 该命令的输出是...

$ hcitool scan
Scanning ...

    00:18:56:68:AE:08     OBDII

我需要一种简单的方法将它通过管道传输到 grep(或任何有效的方法)并检查字符串“OBDII”的输出。如果它看到它,那么它会使用同一行,将生成的 MAC 复制到一个变量中,同时在最后去除所有空格和 OBDII 标识符,只留下 MAC 以在脚本中进一步使用。

完成这项工作的最简单方法是什么?

感谢任何帮助!

【问题讨论】:

标签: linux bash shell scripting grep


【解决方案1】:

没有理由只在操作成功时有条件地存储输出 - 更容易始终存储它,如果您想知道是否找到匹配项,请检查它是否为空。 p>

result=$(hcitool scan | awk '/OBDII/ { print $1 }')
if [[ $result ]]; then
  echo "Found a value: $result" >&2
else
  echo "No result found" >&2
fi

【讨论】:

  • 我的生活中需要更多像你一样的人,查尔斯哈哈谢谢你的快速回复和解释!我将对“awk”(这是一个有用的工具,但不是我的强项)进行一些研究,并尝试这段代码。再次感谢您!
  • 点头。 awk 实际上是一种成熟的脚本语言——你可以用 sed、grep、cut 等做的任何事情,你也可以在 awk 中做——所以涉及多个这些工具的管道通常最好用一个 awk 命令替换。
  • 顺便说一句,因为它使用[[ $result ]],所以你需要确保你的shebang是#!/bin/bash,而不是#!/bin/sh;否则,将该测试更改为[ -n "$result" ]
  • 漂亮!再次感谢所有的帮助和洞察力。由于某种原因,该脚本无法直接使用,但我将其标记为已回答,因为它让我朝着正确的方向前进,我绝对可以使用它。再次感谢您的帮助!
  • 如果你想知道使用set -x(又名bash -x scriptname)运行的输出,我可能有足够的带宽来帮助你调试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 2014-10-21
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多