2012-01-20 6 views
1

これは私のbashスクリプトです:[: : bad number[::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をrunned、その後sh script.shてきました。

なぜそれが起こっていますか?

+0

'/ usr/local/www/rec'には数字が含まれていますか? –

答えて

1

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

シンプルなハック。 $ STATが常に空または正の数の場合にのみ動作します。

+0

まだ: '[:0 1:悪い番号 ' – Cyclone

+0

' $ CHECK'は1を返しています+ '1'の前に空白がありますので、この画像を見てください:' http://i.imgur .com/DB5y4.jpg'という灰色の背景が選択された出力です。 – Cyclone

+0

@Cycloneそれでは、いつでもそれをトリミングすることができます。状態の前または中に。 –

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

STATCHECKの両方が-gtと比較できる数値ですか。

+0

'STAT'は空のファイルで、' CHECK'が返ってきています: '1 '(空白が入っています)。 – Cyclone

+0

したがって、2つを数値として比較することはできません。あなたはおそらく、その2つを比較する前にそのエラーを捕らえなければなりません。 –

3

は、それが実行したすべての行と可変出力を印刷します

sh -x script.sh 

を使用してスクリプトを実行します。 netstatコマンドとstatコマンドを外部で実行し、チェックします。これらは、整数確かにある場合は、この構文を使用

+1

どのnetstatが出力しても、 'wc -l'は非数値結果を出す可能性が低いので、基本的に'/usr/local/www/rec'ファイルの検査になります。 –