[::bash脚本上的错误号码

时间:2012-01-20 13:03:58

标签: bash unix freebsd

这是我的bash脚本:

#!/usr/local/bin/bash -x

touch /usr/local/p
touch /usr/local/rec
DATA_FULL=`date +%Y.%m.%d.%H`
CHECK=`netstat -an | grep ESTAB | egrep '(13001|13002|13003|13004|13061|13099|16001|16002|16003|16004|16061|16099|18001|18002|18003|18004|18061|18099|20001|20002|20003|20004|20061|20099|13000|16000|18000|20000)' | awk '{ print $5 }' | sort -u | wc -l`
netstat -an | grep ESTAB | egrep '(13001|13002|13003|13004|13061|13099|16001|16002|16003|16004|16061|16099|18001|18002|18003|18004|18061|18099|20001|20002|20003|20004|20061|20099|13000|16000|18000|20000)' | awk '{ print $5 }' | sort -u | wc -l > /usr/local/www/p

STAT=`cat /usr/local/www/rec`
if [ "$CHECK" -gt "$STAT" ]; then
echo $CHECK"\n"$DATA_FULL > /usr/local/p
fi

当然我已经运行chmod +x script.sh然后sh script.sh,然后我收到以下消息:[: : bad number

为什么会这样?

4 个答案:

答案 0 :(得分:3)

使用

运行脚本
sh -x script.sh

它将打印它执行的每一行和变量输出。 在外面运行netstat命令和stat命令并检查。

答案 1 :(得分:1)

可能你的/usr/local/www/rec是空的。尝试

STAT=`cat /usr/local/www/rec 2>/dev/null || echo 0`

也许

答案 2 :(得分:1)

您确定STATCHECK都是可以与-gt进行比较的数字吗?

答案 3 :(得分:1)

如果这些是肯定的整数,请使用此语法,

if [ "0$(echo $CHECK|tr -d ' ')" -gt "0$(echo $STAT|tr -d ' ')" ];

一个简单的黑客。仅在$ STAT始终为空或正数时才有效。