#!/bin/bash # File_name = dd.sh #1. $$表示当前Shell进程的pid。 #2. trap信号捕捉是为了保证在Shell正常或异常退出时,仍然能够将该脚本创建的临时awk脚本文件删除。 awk_script_file="/tmp/scf_tmp.$$" trap "rm -f $awk_script_file" EXIT #3. 首先需要说明的是,'EOF'中的单引号非常重要,如果忽略他将无法通过编译,这是因为awk的命令动作必须要用单引号扩住。 #4. awk脚本的show函数中,int(mb * 100) / 100这个技巧是为了保证输出时保留小数点后两位。 cat << 'EOF' > $awk_script_file function show(size) { mb = size / 1024; int_mb = (int(mb * 100)) / 100; gb = mb / 1024; int_gb = (int(gb * 100)) / 100; if (substr(size,1,1) !~ "[0-9]" || substr(size,2,1) !~ "[0-9]") { return size; } else if (mb < 1) { return size "K"; } else if (gb < 1) { return int_mb "M"; } else { return int_gb "G"; } } #5. 在BEGIN块中打印重定义的输出头信息。 BEGIN { printf "%-20s %7s %7s %7s %8s %s\n","FileSystem","Size","Used","Avail","Use%","Mounted" } #6. !/文件系统/ 表示过滤掉包含Filesystem的行,即df输出的第一行。 其余行中,有个域字段可以直接使用df的输出,有的需要通过show函数的计算, 以得到更为可读的显示结果。 !/文件系统/ { size = show($2); used = show($3); avail = show($4); printf "%-20s %7s %7s %7s %8s %s\n",$1,size,used,avail,$5,$6 } EOF df -k | awk -f $awk_script_file [wulei@bogon 桌面]$ ./dd FileSystem Size Used Avail Use% Mounted /dev/sda2 17.45G 2.47G 14.09G 15% / tmpfs 503.26M 232K 503.03M 1% /dev/shm /dev/sda1 290.51M 31.03M 244.47M 12% /boot
转载于:https://blog.51cto.com/kernal/1428695