2013-07-16 4 views
0

У меня проблема. Мне нужно некоторое время отображать эхо, я использую два эха, первый из которых работает, а второй - ошибку.Ошибка Bash echo a

#!/bin/bash 
conexiuni="/tmp/conexiuni" 
if [ "$1" != "" ]; then 
netstat -tuan | grep $1 | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n > $conexiuni 
else 
netstat -tuan | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n > $conexiuni 
fi 

cat $conexiuni | while read line 
do 
    con=`echo ''$line'' | awk '{print $1}'` 
    ip=`echo ''$line'' | awk '{print $2}'` 
    if [ "$con" -gt "4" ]; then 
     `echo -e "$ip" >> /var/log/drop_sc_ip` 
     `echo -e "$ip"` 
    fi 
done 
if [ -f "$conexiuni" ]; 
then 
    `rm -rf $conexiuni` 
fi 

Ошибка:

./show_conn: line 15: 8.97.80.2: command not found 
./show_conn: line 15: 8.76.109.13: command not found 
./show_conn: line 15: 8.33.15.2: command not found 
./show_conn: line 15: 9.118.226.3: command not found 

ответ

1

Вы можете написать эту часть без кавычки:

if [ "$con" -gt "4" ]; then 
     echo -e "$ip" >> /var/log/drop_sc_ip 
     echo -e "$ip" 
fi 

также же в этой части:

rm -rf $conexiuni 

с кавычкой , он сначала выполняет то, что находится внутри e backticks, а затем пытается выполнить вывод обратных выходов.

и изменить цикл:

while read con ip 
do 
    if [ "$con" -gt "4" ]; then 
     echo -e "$ip" >> /var/log/drop_sc_ip 
     echo -e "$ip" 
    fi 
done < $conexiuni 
+0

Спасибо! это работает, и это быстрее. – Cosmin