Awk shell中的整数预期错误

Awk shell中的整数预期错误,awk,sed,sh,Awk,Sed,Sh,我正在构建以下脚本,以发送有关java堆空间的警报 PID=$(ps -ef | grep [t]omcat | awk '{print $2}') echo $PID /usr/java/bin/jstat -gcutil $PID | awk 'FNR == 2 {print $3, $4}' | while read output; do espace=$(echo $output | awk '{print $1}' | sed 's/.\{3\}$//' ) ospace=$(ech

我正在构建以下脚本,以发送有关java堆空间的警报

PID=$(ps -ef | grep [t]omcat | awk '{print $2}')
echo $PID

/usr/java/bin/jstat -gcutil $PID | awk 'FNR == 2 {print $3, $4}' | while read output; do
espace=$(echo $output | awk '{print $1}' | sed 's/.\{3\}$//' )
ospace=$(echo $output | awk '{print $2}' | sed 's/.\{3\}$//' )

echo $espace
echo $ospace
if [ "$opsace" -ge "85" ]; then
  echo "Old Gen Heap getting full on $(hostname) on $(date)" >> /tmp/$$
fi
done

if [ -s /tmp/$$ ]
then
sendEmail -f blah@blah.com \
          -t $EMAILTO \
          -u "Disk Space Alert at $(hostname)" \
          -s $SMTP \
          -xu $SMTP_USER \
          -xp $SMTP_PASS \
          -l /tmp/$$.log \
          -o tls=yes -q \
           < /tmp/$$ &
fi
我不知道为什么它认为77不是整数。它是十进制的,所以我用sed去掉变量的最后3个字符

任何想法都将不胜感激。谢谢

if [ "$opsace" -ge "85" ]; then
#       ^^
…不是

if [ "$ospace" -ge "85" ]; then
#       ^^

因此,它正在运行:

if [ '' -ge 85 ]
…空字符串实际上不是整数

…不是

if [ "$ospace" -ge "85" ]; then
#       ^^

因此,它正在运行:

if [ '' -ge 85 ]
…空字符串实际上不是整数

…不是

if [ "$ospace" -ge "85" ]; then
#       ^^

因此,它正在运行:

if [ '' -ge 85 ]
…空字符串实际上不是整数

…不是

if [ "$ospace" -ge "85" ]; then
#       ^^

因此,它正在运行:

if [ '' -ge 85 ]

…空字符串实际上不是整数。

在运行脚本时使用
set-x
,或者
bash-x yourscript
,并给出问题行的确切输出。(这将显示
回声
模糊的任何隐藏字符)。实际上,这是一个打字错误
opsace
不是
ospace
(顺便说一句,这是一个根本不调用awk的行上的错误;为什么它被这样标记?另一方面,从awk到sed的管道是愚蠢的;
awk
可以做任何事情
sed
可以和更多)…另一方面,
echo$output
是错误的;你想要的是
echo“$output”
,除非你想把globs扩展,标签和换行符变成空格,狗和猫住在一起,等等。即使这样也不完美——例如,如果
output=-n
,那么即使
echo“$output”
也不会起任何作用
printf“%s\n'$output”
是一个更可靠的替代方案。运行脚本时使用
set-x
,或
bash-x yourscript
,并给出问题行的确切输出。(这将显示
回声
模糊的任何隐藏字符)。实际上,这是一个打字错误
opsace
不是
ospace
(顺便说一句,这是一个根本不调用awk的行上的错误;为什么它被这样标记?另一方面,从awk到sed的管道是愚蠢的;
awk
可以做任何事情
sed
可以和更多)…另一方面,
echo$output
是错误的;你想要的是
echo“$output”
,除非你想把globs扩展,标签和换行符变成空格,狗和猫住在一起,等等。即使这样也不完美——例如,如果
output=-n
,那么即使
echo“$output”
也不会起任何作用
printf“%s\n'$output”
是一个更可靠的替代方案。运行脚本时使用
set-x
,或
bash-x yourscript
,并给出问题行的确切输出。(这将显示
回声
模糊的任何隐藏字符)。实际上,这是一个打字错误
opsace
不是
ospace
(顺便说一句,这是一个根本不调用awk的行上的错误;为什么它被这样标记?另一方面,从awk到sed的管道是愚蠢的;
awk
可以做任何事情
sed
可以和更多)…另一方面,
echo$output
是错误的;你想要的是
echo“$output”
,除非你想把globs扩展,标签和换行符变成空格,狗和猫住在一起,等等。即使这样也不完美——例如,如果
output=-n
,那么即使
echo“$output”
也不会起任何作用
printf“%s\n'$output”
是一个更可靠的替代方案。运行脚本时使用
set-x
,或
bash-x yourscript
,并给出问题行的确切输出。(这将显示
回声
模糊的任何隐藏字符)。实际上,这是一个打字错误
opsace
不是
ospace
(顺便说一句,这是一个根本不调用awk的行上的错误;为什么它被这样标记?另一方面,从awk到sed的管道是愚蠢的;
awk
可以做任何事情
sed
可以和更多)…另一方面,
echo$output
是错误的;你想要的是
echo“$output”
,除非你想把globs扩展,标签和换行符变成空格,狗和猫住在一起,等等。即使这样也不完美——例如,如果
output=-n
,那么即使
echo“$output”
也不会起任何作用
printf“%s\n”“$output”
是一个真正可靠的替代方案。