Это мой 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.
chmod +x script.sh
sh script.sh
[: : bad number
Почему это происходит?
Запустите ваш скрипт, используя
sh -x script.sh
Он напечатает каждую строку, которую он выполняет, и вывод переменной.Запустите команду netstat и команду stat снаружи и проверьте.
Если это целые числа, используйте этот синтаксис,
if [ "0$(echo $CHECK|tr -d ' ')" -gt "0$(echo $STAT|tr -d ' ')" ];
Простой взлом.Работает только если $ STAT всегда либо пустое, либо положительное число.
Вы уверены, что и STAT, и CHECK - это числа, которые можно сравнить с -gt?
STAT
CHECK
-gt
вероятно ваш /usr/local/www/rec пуст. Попробуйте
/usr/local/www/rec
STAT=`cat /usr/local/www/rec 2>/dev/null || echo 0`
возможно.