虽然这个错误非常普遍,几乎在网上的任何地方都有解释,但我决定提出一个新的问题,因为我无法得到这个具体案例的线索。
我正在尝试从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的所有帐户,输出应该是这样的:帐户/配额/已用配额。
由于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
但它返回另一个错误: 第13行:[: - gt:一元运算符预期
我还尝试将if子句中的值括在引号之间,但如果我没有错,bash会将引号的内容解释为字符串并返回:
line 13: [: : integer expression expected
我确信我已接近解决方案,但此刻我仍然陷入困境。
答案 0 :(得分:0)
您将变量size
声明为set -i size
的整数。稍后你尝试分配一个值,然后检查它是一个有效的整数,它不是,然后你得到错误。在您的情况下,${mb_size}
中的一个值是字符串08
,然后将其解释为错误的八进制值。
我建议你让循环遍历另一个未声明为int的变量(因此for
语句不会产生问题),然后作为第一个语句分配循环变量的字符串值正确,以便它不会被解释为八进制:
for sizeStr in ${mv_size}
do
size=$((10#$sizeStr))
if [ $size -gt $((10#$szquota)) ]
then
…
您当然也可以将变量的声明删除为整数。这可能也解决了这个问题。