我必须检查磁盘卷上的可用空间并使用df -h生成此输出的命令
Filesystem Size Used Avail Use% Mounted on
/dev/md0 27G 24G 2.1G 92% /
udev 506M 112K 506M 1% /dev
/dev/sda1 102M 40M 63M 39% /boot
Run Code Online (Sandbox Code Playgroud)
这篇剧本
my (@space, @freesp);
@space = grep /\/dev\/md0/,`df -h`;
print "@space\n";
Run Code Online (Sandbox Code Playgroud)
给了我
/dev/md0 27G 24G 2.1G 92% /
Run Code Online (Sandbox Code Playgroud)
我可以在空白上分割出值$freesp[0],$freesp[1]等等.
但我想G用空格删除或替换它,以便我可以比较$freesp[3]一些值,并可以继续我的脚本.
那么我必须使用的正则表达式是什么,或者还有其他更好的方法吗?
这段代码对我有用,但我正朝着我提到的方向前进.
#!/usr/bin/perl
use strict;
use warnings;
my (@space, @freesp);
@space = grep /\/dev\/md0/, `df`;
print "@space\n";
for (@space) {
chomp;
@freesp = split /\s+/, $_;
}
if ($freesp[3]/1024/1024 < 2.0) {
print "Space is less\n";
}
else {
print "Space is OK\n";
}
#print ($freesp[3]/1024/1024);
Run Code Online (Sandbox Code Playgroud)
如果您打算使用脚本解析输出,那么真正的解决方案是不使用该-h选项df.这样,输出首先不会包含"人类可读" K/ M/ G后缀.
您可能希望改为使用该-B1选项,这会导致以字节为单位报告所有大小.
编辑:要回答文字问题,您可以删除后缀并适当地重新调整值,如下所示:
my %units = (K => 2**10, M => 2**20, G => 2**30, T => 2**40,
P => 2**50, E => 2**60, Z => 2**70, Y => 2**80);
s/^(\d+(?:\.\d+)?)([KMGTPEZY])$/$1 * $units{$2}/e for @freesp[1 .. 3];
Run Code Online (Sandbox Code Playgroud)
但是,使用-B1开关而不是-h更容易给出相同的结果,更不用说更准确和可靠.
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |