Помощь со скриптом

#!/bin/bash

a=`netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n | grep -v '1 ' | grep -v '2 ' | grep -v '3 ' | grep -v '1.1.1.1' | grep -v '1.2.2.2' | grep -v '127.0.0.1' | grep -v '127.0.1.'`
ip=`netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n | grep -v '1 ' | grep -v '2 ' | grep -v '3 ' | grep -v '1.1.1.1' | grep -v '1.2.2.2' | grep -v '127.0.0.1' | grep -v '127.0.1.' | awk '{print$2}' | tail -1`
d=`date`
p=`ps ax | grep $IP | grep -v grep | grep -v /usr/sbin | awk '{print $1}'`
k=`kill -9 $p`
if [ -n "$a" ]
    then echo -e "file exists\n IPs copied in .../log folder" && echo -e "\n Current date: $d \n$a" >> /var/log/offendersips.log 
else 
    echo "file empty, no abuse"
fi
if [ -n "$a" ]
    then echo "$k"
else 
    echo "file empty, no abuse"
fi

Ошибка, которую я получаю:

Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
file exists
IPs copied in .../log folder
1
задан 22 June 2015 в 16:33

1 ответ

Имена переменных в bash чувствительны к регистру; у вас нет набора переменных $IP (хотя у вас есть набор переменных $ip): grep $IP расширяется до grep, что приводит к ошибке grep и ошибке kill.

Измените эту строку

p=`ps ax | grep $IP | grep -v grep | grep -v /usr/sbin | awk '{print $1}'`

на эту

p=`ps ax | grep $ip | grep -v grep | grep -v /usr/sbin | awk '{print $1}'`
3
ответ дан 23 May 2018 в 19:36
  • 1
    теперь я получаю эту ошибку: строка 11: неожиданный EOF при поиске соответствующей строки `` '30: синтаксическая ошибка: неожиданный конец файла ====== строка 11 - команда kill – Vitalik Jimbei 22 June 2015 в 16:59
  • 2
    @VitalikJimbei. В переменной $ip не обязательно содержится строка, и вы не проверяете ее на пустые строки. Попробуйте установить $ip на пользовательское значение, чтобы проверить это, и если все идет гладко, отредактируйте скрипт так, чтобы он обслуживал пустые строки на $ip (if [ -n "$ip" ]; then [...]), – kos 22 June 2015 в 17:20
  • 3
    Используйте $ (..) вместо устаревшего `..`, рассмотрите использование pgrep вместо grepping ps output. – A.B. 22 June 2015 в 18:15

Другие вопросы по тегам:

Похожие вопросы: