如果我们可以在Perl中执行此操作也可以。 我不知道这是否可能,但这是我想要做的。我想获得的内存的内存百分比正在使用(有可能是这样做的更好的方法,请让我知道)设置一个Bash命令返回为变量
我有这样的bash命令
free -m | grep "Mem: " | awk '{print ($3/$2)*100}'
这将返回一个数字,但我想要做的是为命令的输出设置一个变量。
So var1= Output of the above command
如果我们可以在Perl中执行此操作也可以。 我不知道这是否可能,但这是我想要做的。我想获得的内存的内存百分比正在使用(有可能是这样做的更好的方法,请让我知道)设置一个Bash命令返回为变量
我有这样的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}')
说明:在外壳
$(...)
语法称为命令替换。stdout
。旁白:
替代语法与反引号:
var1=`free -m | grep "Mem: " | awk '{print ($3/$2)*100}')`
,但它不是由于可读性和嵌套问题的首选方法。
你并不需要使用grep
,如果您正在使用awk
。您可以简化您的命令:
var1=$(free -m | awk '/Mem:/{print ($3/$2)*100}')
好抓! +1 =) –
如果你使用的是Linux(或者任何Unix兼容的/ proc接口),你可以使用的内存%这样:
var1=$(perl -ne '/(\w+):\s*(\d+)/ and ($mem{$1} = $2) }{ printf "%0.2f", 100 - 100 * $mem{MemFree}/$mem{MemTotal}' /proc/meminfo)
注意一般是一个好主意,减去缓冲区高速缓存&(OS缓存往往以填补所有可用的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)
谢谢,这正是我一直在寻找。我忘了在命令前添加“$”。我把括号括起来,但没有$。再次感谢。 – jenglee
@jenglee:很高兴帮助=) –