在这个脚本中,我用来检查给定邮箱的大小,大小以字节形式返回。以“人类可读”的格式会更容易。
This问题很好,但它已经开始变老,我无法根据自己的需要修改答案。
有:
MAILBOX="/var/mail/$1
GOOD=471859200 #450MB
ACTUALSIZE=$(wc -c <"$MAILBOX")
MAILBOXDIM=$(grep "mailbox_size_limit" /etc/postfix/main.cf | awk -F" " '{print $3}')
我需要以KB / MB
打印值if [ ! -f $MAILBOX ]; then
echo "Can't check the size of $MAILBOX | Size=0; Total=$MAILBOXDIM"
exit 3
else
if [ $ACTUALSIZE -lt $GOOD ]; then
echo "Size of mailbox is $ACTUALSIZE | Size=$ACTUALSIZE; Total=$MAILBOXDIM"
exit 0
fi
fi
嗯,代码要长得多,但或多或少都是一样的。
我需要类似
的内容echo "Size of mailbox is convert($ACTUALSIZE) | Size=convert($ACTUALSIZE); Total=convert($MAILBOXDIM)"
我无法写出正确的功能
修改 谢谢大家!如果您或将来的任何人想知道为什么我需要2个变量来实现相同的结果
ACTUALSIZE=$(wc -c <"$MAILBOX")
ASIZE=$(convert "$ACTUALSIZE")
echo $ASIZE
是因为我使用IF来比较这些值。 ASIZE是“450Mib”,IF不喜欢字母。
要解决这个问题,请使用2个变量:
GOOD=450
if [ $ACTUALSIZE -lt $GOOD ]; then
echo "Size is $ASIZE"
fi
或者使用awk,然后:
ASIZE=$(convert $(wc -c <"$MAILBOX") | awk -F"MiB" '{print $1}')
if [ $ASIZE -lt $GOOD ]; then
echo "Size "$ASIZE"MiB"
fi
或阅读手册: here关于后缀和iec / iec-i
答案 0 :(得分:1)
使用expr,如:
expr $ACTUALSIZE / 1024
expr $ACTUALSIZE \* 1024
以单位向下或向上。
您也可以直接在echo中使用它:
echo $(expr $ACTUALSIZE / 1024)
答案 1 :(得分:1)
转换为int或float的一些函数:
to_kb_int() {
echo $(( $1 / 1024 ))
}
to_mb_int() {
to_kb_int $(( $1 / 1024 ))
}
to_kb_dec() {
echo "scale=2; $1/1024" | bc
}
to_mb_dec() {
echo "scale=2; $(to_kb_dec "$1")/1024"| bc
}
to_kb_int 2048
to_mb_int 6148728
to_kb_dec 2048
to_mb_dec 6148728
输出:
2
5
2.00
5.86
答案 2 :(得分:1)
convert() { numfmt --to=iec-i --suffix=B "$@"; }