方法比较笨,算是做一个总结,习惯用AWK进行取值,下面以free -m为例来举例

!!!持续更新,看到的网友也可以留言的形式来一起更新内容,谢谢


例子:

[root@130 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1861        174       1687          0          8         50
-/+ buffers/cache:        115       1746
Swap:         8191          0       8191


1、取值

[root@130 ~]# free -m|awk  'NR==2 {print $2}'
1861

-F 可以指定分隔符

NR==2    取第二行

print $2    打印第二个


例子:

[root@localhost ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E8:7D:7E  
          inet addr:192.168.222.128  Bcast:192.168.222.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fee8:7d7e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1565 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1148 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:152246 (148.6 KiB)  TX bytes:266621 (260.3 KiB)

2、取IP

ifconfig eth0|awk -F '[ :]' 'NR==2 {print $13}'
192.168.222.128
ifconfig  eth0|awk  -F  '[  :]+'  'NR==2  {print  $13}'
192.168.222.128

echo ...1,,,,2|awk -F '[.,]+' '{print $2}'
1
echo ...1,,,,2|awk -F '[.,]+' '{print $3}'
2

ip a|grep -E "eth|eno"|awk -F '[ /]+' 'NR==3 {print $3}'        ##grep -E  同时筛选两个字符


-F 指定分隔符[]里指定要匹配的分隔符

不含“+” 意味着inet前面的N个字符,要仔细计算很麻烦

含“+”就将连续的空格当做一个整体



3、计算(参考内存信息)

[root@130 ~]# free -m|awk 'NR==2 {print int(""$3+$2"")}'
2035
[root@130 ~]# free -m|awk 'NR==2 {print int(""$3/$2*100"")}'
9
[root@130 ~]#

int    取整

[root@localhost ~]# df -m
Filesystem                   1M-blocks  Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root     45963  2361     41268   6% /
tmpfs                              931     0       931   0% /dev/shm
/dev/sda1                          485    39       421   9% /boot

加减法:
df -m|awk -F '[ ]+' '{if(NR==2) a=$3;if(NR==3) b=$3;if(NR==4) c=$3} END{printf ("%.0fM\n",a+b+c)}'
##分别取2/3/4行的第3列,设置变量为$1-$3,END结束进行结果计算。a+b+c进行取值
"%.0fM\n"   0保留0位小数/M为兆单位\n表示换行
乘除法:
df -m|awk -F '[ ]+' '{if(NR==2) a=$3;if(NR==3) b=$3;if(NR==4) c=$3} END{printf ("%.0fM\n",(a+b)/c)}'
61M


很多参数的这里没有写,可以参考 http://www.cnblogs.com/xudong-bupt/p/3721210.html