【问题标题】:Linux shell scripting: How to store output from terminal in integers (but only numbers)?Linux shell 脚本:如何将终端的输出存储为整数(但只有数字)?
【发布时间】:2016-12-17 01:24:48
【问题描述】:

我是 shell 脚本的新手,这是我的问题:
我想将airmon-ng check 的输出中的 PID 存储到一些变量(例如:$1、$2、$3),以便我可以执行kill $1 $2 $3。 这是airmon-ng check 的示例输出:

Found 3 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to kill (some of) them!

  PID Name
  707 NetworkManager
  786 wpa_supplicant
  820 dhclient

我要获取数字 707786820
我尝试使用set 'airmon-ng check',然后使用 for 循环:

set `airmon-ng check`
n=$#
for (( i=0; i<=n; i++ ))
do
        echo $i
done

它输出 1,2,3,...36 不是文字或数字,所以我不知道该怎么做。

【问题讨论】:

  • 我认为会有更好的方法来做到这一点,但我想不通。所以任何方式都可以接受:)

标签: linux bash shell io scripting


【解决方案1】:
airmon-ng check | egrep -o '\b[0-9]+\b' | xargs kill

egrep 是带有扩展正则表达式的 grep(如 grep -E),-o 表示仅提取匹配部分,\b 匹配单词边界,因此您不会在进程名称中意外出现任何数字或[0-9]+ 匹配一个或多个十进制数字,xargs kill 将所有匹配项作为参数传递给 kill 命令。

请注意,解析供人类阅读的输出可能并不总是一个好主意。此外,仅仅杀死所有这些进程听起来也不太聪明,但正确使用 airocrack 超出了这个问题。

【讨论】:

  • 不确定这是否仅捕获 pid。你需要更严格的检查
  • 是的,但是这种方法无论如何都不稳定。这只是成千上万其他问题之上的一个问题;)。
【解决方案2】:

您可以获取以空格分隔的 PID 列表,例如像这样(“PID”之后第一列的所有内容):

l=`airmon-ng check | awk 'BEGIN { p=0 } { if (p) { print $1" "; } if ($1=="PID") { p=1 } }' | tr '\n' ' '`

【讨论】:

  • 没想到,太棒了。非常感谢:)
【解决方案3】:

为什么不使用 grep?

myvar=$(airmon-ng check | grep '[0-9]\{3,6\}')

这假定 PID 为 3 到 6 位,并且会从 airmon-ng 输出中抓取任何类似长度的内容。因此,如果输出包含其他数字长度相似的字符串,这可能无法正常工作。

【讨论】:

  • 不确定这是否只会输出 pid。如果 o/p 包含 pid 以外的数字怎么办?
  • @sjsam 不幸的是,我并不像我希望的那样精通正则表达式,也无法将一些适合典型 PID 格式的东西放在一起。
  • 嗯.. 从输出中我们可以假设 pid 出现在开头,您只需要在谷歌上搜索一下就可以完成剩下的工作。
【解决方案4】:

我会为此使用awk 并将输出存储在一个数组中

pids=( $(airmon-ng check | awk '/^[[:blank:]]+[[:digit:]]+[[:blank:]]+/{print $1}') )
#'pids' is an array
kill "${pids[@]}" #killing all the processes thus found.

【讨论】:

  • 非常好的方法谢谢。不幸的是,我的评分太低了,我不能投票给答案:)
  • @Ika : 没问题的朋友,你享受生活:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
相关资源
最近更新 更多