1

如果我们可以在 Perl 中执行此操作,那也很好。我不知道这是否可能,但这是我想要做的。我正在尝试获取正在使用的内存百分比(可能有更好的方法,请告诉我)

我有这个 bash 命令

free -m | grep "Mem: " | awk '{print ($3/$2)*100}' 

这将返回一个数字,但我想做的是为命令的输出设置一个变量。

So var1= Output of the above command
4

4 回答 4

5

我相信这就是您正在寻找的:

var1=$(free -m | grep "Mem: " | awk '{print ($3/$2)*100}')

解释:

  • $(...)语法在 shell 中称为命令替换。
  • 它产生一个子shell来执行括号内的任何内容,然后将打印出的任何内容返回到stdout该子shell中。

在旁边:

另一种语法是反引号:

var1=`free -m | grep "Mem: " | awk '{print ($3/$2)*100}')`

但由于可读性和嵌套问题,它不是首选方法。

于 2012-11-19T16:28:02.297 回答
4

你不需要使用grep,如果你正在使用awk. 您可以将命令简化为:

var1=$(free -m | awk '/Mem:/{print ($3/$2)*100}')
于 2012-11-19T16:35:41.397 回答
0

您可以在命令上使用反引号:

export var=`command`
于 2012-11-19T16:29:37.730 回答
0

如果您使用的是 Linux(或任何具有兼容 /proc 接口的 Unix),您可以通过以下方式获取已用内存的百分比:

var1=$(perl -ne '/(\w+):\s*(\d+)/ and ($mem{$1} = $2) }{ printf "%0.2f", 100 - 100 * $mem{MemFree} / $mem{MemTotal}' /proc/meminfo)

请注意,减去缓冲区和缓存通常是一个好主意(操作系统缓存往往会填满所有可用的 RAM):

var2=$(perl -MList::Util=sum -ne '/(\w+):\s*(\d+)/ and ($mem{$1} = $2) }{ printf "%0.2f", 100 - 100 * sum(@mem{qw{Buffers Cached MemFree}}) / $mem{MemTotal}' /proc/meminfo)
于 2012-11-26T19:37:47.527 回答