2012-01-20 2 views
1

Это мой Баш скрипт:[:: плохой номер на Баш скрипт

#!/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 

Ofcourse Я chmod +x script.sh запущенной, а затем sh script.sh, то я получаю следующее сообщение: [: : bad number.

Почему это происходит?

+0

Имеет ли '/ usr/local/www/rec' любое число? –

ответ

1

Если это число наверняка, используйте следующий синтаксис,

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

Простой хак. Работает только в том случае, если $ STAT всегда либо пустое, либо положительное.

+0

Still: '[: 0 1: bad number ' – Cyclone

+0

Имейте в виду, что '$ CHECK' возвращает 1 + есть пробелы перед' 1', посмотрите на это изображение: 'http: //i.imgur .com/DB5y4.jpg «серый фон - выбранный выход. – Cyclone

+0

@ Циклон, тогда вы всегда можете обрезать его. до или внутри условия. –

1

Возможно, ваш /usr/local/www/rec пуст. Попробуйте

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

возможно.

+0

Вы имеете в виду '/ usr/local/www/rec'? –

+0

Да, извините. Я отредактирую его. –

+0

Я добавляю «0», поэтому его «0 $ STAT» '. Проверьте мой ответ –

1

Вы уверены, что оба STAT и CHECK являются номерами, которые можно сравнить с -gt?

+0

'STAT' - пустой файл, а' CHECK' возвращается: '1 ' (с пробелами). – Cyclone

+0

Значит, вы не можете сравнить эти два числа. Вероятно, вам придется поймать эту ошибку, прежде чем сравнивать их. –

3

Запустите скрипт, используя

sh -x script.sh 

Это будет печатать каждую строку она выполняет и выходной переменной. Запустите команду netstat и команду stat снаружи и проверьте.

+1

любые выходы netstat, 'wc -l' вряд ли приведут к нечисловому результату, поэтому он в основном сводится к проверке файла'/usr/local/www/rec'. –

Смежные вопросы