Автор Тема: Помощ за Shell script  (Прочетена 3594 пъти)

lispevetpool

  • Участници
  • ***
  • Публикации: 4
    • Профил
Помощ за Shell script
« -: Nov 16, 2015, 13:25 »
Здравейте. Имам проблем със следния скрипт:

#!/bin/bash
serverlist.txt | while read line
do
        if [ ! -z $line ]; then
                PINGCOUNT=2
                PING=$(ping -c $PINGCOUNT $line | grep received | cut -d ',' -f2 | cut -d ' ' -f2)
                if [ $PING -eq 0 ]; then
                        echo "Server $line offline"
                else
                        echo "Server $line online"
                fi
        fi
done


Проверих го онлайн с execute_bash_online, но ми дажа следната грешка:

main.sh: line 16: syntax error near unexpected token 'done'
main.sh: line 16: 'done
'

Какъв е проблема? Моля ви помогнете.
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: Помощ за Shell script
« Отговор #1 -: Nov 16, 2015, 14:00 »
1. Изглежда, че не ни показваш целия скрипт - в грешката се говори за ред 16, какъвто нямаш в даденото парче код, а done-ът тук си е наред;
2. След като оправиш текущата грешка ще ти каже, че нямаш команда serverlist.txt - пропуснал си командата (вероятно cat) пред файла;
3. Не съм съгласен с качеството на ping проверката по начина, по който я правиш, ама ако ти удовлетворява нуждите...
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

sopata

  • Напреднали
  • *****
  • Публикации: 50
  • Distribution: Debian
  • Window Manager: Gnome
    • Профил
Re: Помощ за Shell script
« Отговор #2 -: Nov 16, 2015, 14:22 »
#!/bin/bash
cat server.txt | while read line
do
        # check for no blank lines
        if [ ! -z $line ]; then
                PINGCOUNT=2
                PING=$(ping -c $PINGCOUNT $line | grep received | cut -d ',' -f2 | cut -d ' ' -f2)
                if [ $PING -eq 0 ]; then
echo "DOWN $line" | mail -s DOWN  test@test.com
                else
echo "UP $line"
fi
        fi
done
Активен

0101010101010101010101

lispevetpool

  • Участници
  • ***
  • Публикации: 4
    • Профил
Re: Помощ за Shell script
« Отговор #3 -: Nov 16, 2015, 15:13 »
1. Изглежда, че не ни показваш целия скрипт - в грешката се говори за ред 16, какъвто нямаш в даденото парче код, а done-ът тук си е наред;
2. След като оправиш текущата грешка ще ти каже, че нямаш команда serverlist.txt - пропуснал си командата (вероятно cat) пред файла;
3. Не съм съгласен с качеството на ping проверката по начина, по който я правиш, ама ако ти удовлетворява нуждите...

Опа, грешка. Показва, че проблемът е на 13 ред.

http://dox.bg/files/dw?a=d751a82efb

"server.txt" съдържа няколко реда:
google.com
yahoo.com
mail.bg
Активен

lispevetpool

  • Участници
  • ***
  • Публикации: 4
    • Профил
Re: Помощ за Shell script
« Отговор #4 -: Nov 16, 2015, 15:14 »
#!/bin/bash
cat server.txt | while read line
do
        # check for no blank lines
        if [ ! -z $line ]; then
                PINGCOUNT=2
                PING=$(ping -c $PINGCOUNT $line | grep received | cut -d ',' -f2 | cut -d ' ' -f2)
                if [ $PING -eq 0 ]; then
echo "DOWN $line" | mail -s DOWN  test@test.com
                else
echo "UP $line"
fi
        fi
done

Да, почти същият е, но и на този скрипт ми дава същата грешка на последния ред.
Активен

nslave

  • Напреднали
  • *****
  • Публикации: 159
  • Distribution: Fedora / Debian
  • Window Manager: Xfce
    • Профил
Re: Помощ за Shell script
« Отговор #5 -: Nov 16, 2015, 15:29 »
Ето едно нещо дето съм ползвал преди и може да ти бъде полезно.

Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. # Space delimited hosts
  4. HOSTS="127.0.0.1 127.0.0.1"
  5.  
  6. for myhost in $HOSTS
  7. do
  8.        count=$(ping -c 10 $myhost | grep received | awk -F',' '{ print $2 }' | awk -F' ' '{ print $1 }')
  9.  
  10. if [ $count -lt 5 ]
  11.        then
  12.                echo $myhost >> /tmp/pingtestmsg.txt
  13.                echo "$(date)" $myhost "is DOWN!" >> /var/log/pingtest.log
  14.        else
  15.                echo "$(date)" $myhost "is OK!" >> /var/log/pingtest.log
  16. fi
  17. done
  18.  
  19. if [ -f /tmp/pingtestmsg.txt ]
  20.        then
  21.                mutt -s "Hosts DOWN" -c 3598888888888@sms.mtel.net < /tmp/pingtestmsg.txt
  22.        rm /tmp/pingtestmsg.txt
  23. fi
  24.  
Активен

lispevetpool

  • Участници
  • ***
  • Публикации: 4
    • Профил
Re: Помощ за Shell script
« Отговор #6 -: Nov 16, 2015, 18:26 »
Не разбирам от програмиране. Дадоха ми задача, да напиша скрипт, който да проверява дадените в списъка адреси дали са достъпни. Скрипта който намерих би трябвало да работи, но на мен ми дава грешка (явно проблема е в мен). Та въпросът ми е ще работи ли скрипта, който намерих? Също така, освен с пинг, как може да се провери дали даден сървър или IP е паднал - как трябва да се измени кода?

Много ще съм ви благодарен, ако ми помогнете.
« Последна редакция: Nov 16, 2015, 18:32 от lispevetpool »
Активен

nslave

  • Напреднали
  • *****
  • Публикации: 159
  • Distribution: Fedora / Debian
  • Window Manager: Xfce
    • Профил
Re: Помощ за Shell script
« Отговор #7 -: Nov 16, 2015, 23:46 »
При мен работи това, което sopata ти е написал.

Стана ми интересно обаче, кой ти е дал тази задача и каква е целта :)
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: Помощ за Shell script
« Отговор #8 -: Nov 17, 2015, 01:17 »
Опа, грешка. Показва, че проблемът е на 13 ред.
Не зная как постигаш тази грешка, но твоят скрипт работи. Пробвах го и аз през същата услуга, и след като си добавил пропуснатата cat команда, единственият проблем пред успешното изпълнение е, че въпросният симулатор няма ping команда, така че не можеш там да го видиш напълно работещ. Тествай в пълноценна конзола. Ако нямаш Linux, то можеш набързо да си пуснеш един във виртуална машина с VirtualBox, пък бил той и от LiveCD (т.е., без инсталация).
Проверката с ping дали някой хост е достъпен в много ситуации е добра и достатъчна (стига в защитната стена на този хост да не ти е забранено да му изпращаш icmp заявки). Но реализацията в твоя скрипт може да те излъже. Първо, когато наблюдаваш състоянието на нещо със скрипт, то статусът "ОК" (в твоя случай, "online") трябва да се получи от съвкупността на положителните отговори на всички проверки. В твоя скрипт имаш една проверка (тази дали броят на върнатите пакети е нула) и положителния ѝ резултат си го насочил към статуса "offline". Така във всеки друг случай, в който числото не е нула (дори и в текущия случай, когато няма ping команда в тестера), ще ти се връща статус "online", а това може да е пагубно в реална работна постановка. Обърни проверките в скрипта така, че да се връща online само тогава, когато си сигурен, че е така.
Полезно би било, ако увеличиш броя на ping-овете и проверяваш как точно върнатият брой пакети отговаря на броя на изпратените. Ако има върнати, но броят им е по-малък от изпратените, да имаш известие и за това, че хостът е достъпен, но има загуби (връзката до него не е добра).
Но какво и как е нужно да се добави/промени по скрипта наистина много зависи от това кой и за каква цел ти е дал задачата.
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8780
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: Помощ за Shell script
« Отговор #9 -: Nov 17, 2015, 08:07 »

Стана ми интересно обаче, кой ти е дал тази задача и каква е целта :)

Курсова работа. ФМИ е кажи-речи единственият виновник да има толкова много линуксари у нас. Иначе няма къде другаде да се докоснат. От там го разпространяват на работните станции в компаниите (за сървърите е ясно) и броят расте лавинообразно. Странно как историята на Юникс се повтаря при нас на местна почва, макар и доста изродено.

@lispevetpool няма да се мъча да ти прочета името, защото най-вероятно бих вкарал едно „n“ в него по пор4овски маниер. Ако преподавателят ви е казал да проверявате с execute_bash_online, а при теб проверката не минава, значи трябва да се поинтересуваш от друго решение, което не е ping. Най-вероятно самият той това е имал предвид.


п.п. Нетер:

…Тествай в пълноценна конзола. Ако нямаш Linux, то можеш набързо да си пуснеш един във виртуална машина с VirtualBox, пък бил той и от LiveCD (т.е., без инсталация)…

Cygwin да не е спрян от поддръжка? От седем-осем години не съм го пипал. Наскоро чух за нещо наречено Gow, но не съм се интересувал за подробности.

п.п.п. Ходих да проверя (ixquick е верен помощник) Gow няма ping:

https://github.com/bmatzelle/gow/wiki/gow_command

Всъщност няма почти нищо. Но пък не знам дали не може да се комбинира с родният пинг. Демек този вграден bash дали работи в изолация или е достъпен и достъпва остатъка от системата.
« Последна редакция: Nov 17, 2015, 09:05 от go_fire »
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

4096bits

  • Напреднали
  • *****
  • Публикации: 6152
    • Профил
Re: Помощ за Shell script
« Отговор #10 -: Nov 19, 2015, 16:47 »
Задължително ли трява bash скрипт да е или може и някой друг скриптов език?
И първо, какво означава адреса да е достъпен? Да може да се ping-не, да се изпрати GET или POST заявка и да се получи отговор или пък да се обмненят данни с някое web приложение, което слуша на някакъв адрес? Да речем сървъра да върне просто текст "Hello, World!" например.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
rc.d shell script
Настройка на програми
VlasA 3 2637 Последна публикация Aug 29, 2004, 12:05
от VlasA
Shell-script- за минаване от един юзър в друг
Настройка на програми
Nik123 5 3345 Последна публикация Jul 03, 2006, 20:22
от Nik123
shell script с параметри
Общ форум
k0tka 1 2651 Последна публикация May 25, 2012, 20:23
от k0tka
shell script
Общ форум
villimon 29 10263 Последна публикация Nov 01, 2013, 21:43
от neter
ПРЕМЕСТЕНО: shell script
Общ форум
neter 0 1876 Последна публикация Oct 18, 2013, 22:59
от neter