如果我们能在Perl中执行此操作,那也很好。我不知道这是否可能,但这就是我希望能够做到的。我正在尝试获取正在使用的内存的内存百分比(可能有更好的方法,请告诉我)
我有这个 bash 命令
free -m | grep "Mem: " | awk '{print ($3/$2)*100}'
这将返回一个数字,但我想做的是为命令的输出设置一个变量。
So var1= Output of the above command
我相信
这就是你要找的:
var1=$(free -m | grep "Mem: " | awk '{print ($3/$2)*100}')
解释:
$(...)
语法在 shell 中称为命令替换。- 它生成一个子外壳来执行括号内的任何内容,然后将打印出的任何内容返回到该子外壳中的
stdout
。
旁白:
替代语法是带反引号:
var1=`free -m | grep "Mem: " | awk '{print ($3/$2)*100}')`
但由于可读性和嵌套问题,它不是首选方法。
如果你使用的是awk
,你不需要使用grep
。您可以将命令简化为:
var1=$(free -m | awk '/Mem:/{print ($3/$2)*100}')
您可以在命令上使用反引号:
export var=`command`
如果您使用的是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)