freeコマンドをちょっとだけ正確にしてみた

linuxのfreeコマンド(メモリの使用状況を表示する)で、-h --siオプションをつけたときの表示が、どうにもおかしかった(接頭辞が1000ベースでなく1024ベースで表示される)ので、シェルスクリプトを書いてみました。

-h --siオプション以外のオプションがあるときは、freeコマンドを呼び出しています。

#!/bin/bash
OPT="$@";
OPT1=`echo $OPT|grep -e "-h" |grep -e "--si"`;

if [ ${#OPT1} -gt 0 ]
then
  CNT=1;
  CNT1=0;
  printf "%8s";
  for LINE in `free -b`
  do
    if [ $CNT1 -eq 0 ]
    then
      printf "%12s" $LINE;
    else
      if [ $CNT -eq 0 ]
      then
        printf "%-8s" $LINE
      else
        if [[ "$LINE" =~ ^[0-9]{10,12}$ ]]
	then
	  LINE=`echo "scale=1;$LINE/1000000000" | bc`
	  printf "%11.1fG" $LINE;
        else 
	  if  [[ "$LINE" =~ ^[0-9]{7,9}$ ]]
          then
            LINE=`echo "scale=1;$LINE/1000000" | bc`
            printf "%11.1fM" $LINE;
          else
	    if  [[ "$LINE" =~ ^[0-9]{4,6}$ ]]
            then
              LINE=`echo "scale=1;$LINE/1000" | bc`
              printf "%11.1fk" $LINE;
            else 
	      if  [[ "$LINE" =~ ^[0-9]{1,3}$ ]]
              then
                printf "%12dB" $LINE;
	      fi
            fi
	  fi
        fi
      fi
    fi
  CNT=`expr $CNT + 1`;
  if [ $CNT -eq 7 ]
  then
    printf "\n";
    CNT=0;
    CNT1=`expr $CNT1 + 1`;
  fi
 done
  printf "\n";
else
  free "$@";
fi

実行結果(及びfree -h --siとの比較)はこんな感じです。

この記事が気に入ったらサポートをしてみませんか?