このエラーは非常に一般的であり、Web 上のほぼすべての場所で説明されていますが、この特定のケースの手がかりが得られないため、新しい質問をすることにしました。
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
、他の値で行ったように、その内容を 10 進数に変換する方法がわかりませんか? おそらく、私の頭で考えているよりもはるかに単純ですが、私は本当にこの問題から抜け出すことができません. 敬具
編集:
ありがとう@アルフ!
次のようにコードを変更しました。
#!/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
解決に近づいていると確信していますが、現時点ではまだ立ち往生しています。