虽然这个错误很常见并且几乎在网络上到处都有解释,但我决定提出一个新问题,因为我无法获得这个具体案例的线索。
我正在尝试从 Zimbra Collaboration Suite 中获取一些数据,而我能做到的唯一方法是通过 bash。
作为我第一次使用 bash,我发现它有点难以处理。这是代码:
#!/bin/bash
all_account=`zmprov -l gaa`;
declare -i szquota
szquota=524288000
for account in ${all_account}
do
mb_size=`zmmailbox -z -m ${account} gms`;
set -i size;
declare -i quota
declare -i quota2
for size in ${mb_size}
do
if [ $((10#$size)) -gt $((10#$szquota)) ] ; then
quota=`zmprov ga ${account} zimbraMailQuota`;
quota2="10#`zmprov ga ${account} zimbraMailQuota`";
echo "${account},${mb_size},$quota2\n";
fi
done
done
这是回应:
line 12: 137,08: value too great for base (error token is "08")
我需要打印所有配额超过 500MB 的帐户,输出应该是这样的:account/quota/used quota。
由于mb_size
是一个值数组,我无法弄清楚如何将其内容转换为十进制基数,就像我对其他值所做的那样?它可能比我想象的要简单得多,但我真的无法摆脱这个麻烦。亲切的问候
编辑:
谢谢@Alfe!
我修改了这样的代码:
#!/bin/bash
all_account=`zmprov -l gaa`;
szquota=524288000
for account in ${all_account}
do
mb_size=`zmmailbox -z -m ${account} gms`;
declare -i quota
declare -i quota2
for sizeStr in ${mb_size}
do
if [ $size -gt $((10#$szquota)) ] ; then # <--- line 13
quota=`zmprov ga ${account} zimbraMailQuota`;
quota2="10#`zmprov ga ${account} zimbraMailQuota`";
echo "${account},${mb_size},$quota2\n";
fi
done
done
但它返回另一个错误: line 13: [: -gt: unary operator expected
我还尝试将 if 子句中的值括在引号之间,但如果我没记错的话,bash 会将引号的内容解释为字符串并返回:
line 13: [: : integer expression expected
我确信我越来越接近解决方案,但我现在仍然卡住了。