2012-05-16 2 views
1
#!/bin/bash 
#James Kenaley 20120513 
#Server Monitor Script 
while read -r name ip content 
do 
    ip_status=`ping -w1 $ip | grep -c "100%"` 
    web_status=`nmap -n -PN -p 80 $ip | grep -c open` 
    ssh_status=`nmap -n -PN -p 22 $ip | grep -c open` 
    content_status=`diff <(curl -s $ip | md5sum) <(cat $content) | grep -c -e "<" -e ">"` 
    if [ $web_status -eq 1 ] 
    then 
      echo "The webserver is running on $name @ $ip" 
    else 
      echo " The webserver is offline on $name @ $ip" 
    fi 

    if [ $ssh_status -eq 1 ] 
    then 
      echo "SSH is enabled on $name @ $ip" 
    else 
      echo " SSH has been disabled on $name @ $ip" 
    fi 

    if [ $content_change -gt 0 ] 
    then 
      echo " The content has changed on $name's webserver" 
    else 
      echo "The content is the same" 
    fi 
done < server.list 

Я знаю, что простой способ состоял бы в том, чтобы сравнить содержимое другой переменной, но я ДЕЙСТВИТЕЛЬНО хочу сохранить сравнение в одной строке. Поэтому, если кто-нибудь может мне помочь, я был бы очень признателен.Как бы я сделал эту работу?

+0

Ваш скрипт слишком много работает. –

+0

im бросать 3 скрипта вместе Я бы надеялся, что это делало 3x работу lol – UnbrandedTech

ответ

2

diff и grep обе поддержки -q. Используйте их непосредственно в операциях if вместо того, чтобы записывать их вывод и сравнивать их отдельно.

+0

У меня есть идея, как я мог бы реализовать это, небольшой пример? – UnbrandedTech

+1

'if diff -q ...; тогда ... ; fi'' if nmap ... | grep -q ...; тогда ... ; fi' –

+0

спасибо ignacio – UnbrandedTech

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