Титла: Помощ за Shell script Публикувано от: lispevetpool в 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' Какъв е проблема? Моля ви помогнете. Титла: Re: Помощ за Shell script Публикувано от: neter в Nov 16, 2015, 14:00 1. Изглежда, че не ни показваш целия скрипт - в грешката се говори за ред 16, какъвто нямаш в даденото парче код, а done-ът тук си е наред;
2. След като оправиш текущата грешка ще ти каже, че нямаш команда serverlist.txt - пропуснал си командата (вероятно cat) пред файла; 3. Не съм съгласен с качеството на ping проверката по начина, по който я правиш, ама ако ти удовлетворява нуждите... Титла: Re: Помощ за Shell script Публикувано от: sopata в 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 Титла: Re: Помощ за Shell script Публикувано от: lispevetpool в Nov 16, 2015, 15:13 1. Изглежда, че не ни показваш целия скрипт - в грешката се говори за ред 16, какъвто нямаш в даденото парче код, а done-ът тук си е наред; Опа, грешка. Показва, че проблемът е на 13 ред. http://dox.bg/files/dw?a=d751a82efb ($2) "server.txt" съдържа няколко реда: google.com yahoo.com mail.bg Титла: Re: Помощ за Shell script Публикувано от: lispevetpool в Nov 16, 2015, 15:14 #!/bin/bash Да, почти същият е, но и на този скрипт ми дава същата грешка на последния ред. Титла: Re: Помощ за Shell script Публикувано от: nslave в Nov 16, 2015, 15:29 Ето едно нещо дето съм ползвал преди и може да ти бъде полезно.
Код
Титла: Re: Помощ за Shell script Публикувано от: lispevetpool в Nov 16, 2015, 18:26 Не разбирам от програмиране. Дадоха ми задача, да напиша скрипт, който да проверява дадените в списъка адреси дали са достъпни. Скрипта който намерих би трябвало да работи, но на мен ми дава грешка (явно проблема е в мен). Та въпросът ми е ще работи ли скрипта, който намерих? Също така, освен с пинг, как може да се провери дали даден сървър или IP е паднал - как трябва да се измени кода?
Много ще съм ви благодарен, ако ми помогнете. Титла: Re: Помощ за Shell script Публикувано от: nslave в Nov 16, 2015, 23:46 При мен работи това, което sopata ти е написал.
Стана ми интересно обаче, кой ти е дал тази задача и каква е целта :) Титла: Re: Помощ за Shell script Публикувано от: neter в Nov 17, 2015, 01:17 Опа, грешка. Показва, че проблемът е на 13 ред.Не зная как постигаш тази грешка, но твоят скрипт работи. Пробвах го и аз през същата услуга, и след като си добавил пропуснатата cat команда, единственият проблем пред успешното изпълнение е, че въпросният симулатор няма ping команда, така че не можеш там да го видиш напълно работещ. Тествай в пълноценна конзола. Ако нямаш Linux, то можеш набързо да си пуснеш един във виртуална машина с VirtualBox, пък бил той и от LiveCD (т.е., без инсталация). Проверката с ping дали някой хост е достъпен в много ситуации е добра и достатъчна (стига в защитната стена на този хост да не ти е забранено да му изпращаш icmp заявки). Но реализацията в твоя скрипт може да те излъже. Първо, когато наблюдаваш състоянието на нещо със скрипт, то статусът "ОК" (в твоя случай, "online") трябва да се получи от съвкупността на положителните отговори на всички проверки. В твоя скрипт имаш една проверка (тази дали броят на върнатите пакети е нула) и положителния ѝ резултат си го насочил към статуса "offline". Така във всеки друг случай, в който числото не е нула (дори и в текущия случай, когато няма ping команда в тестера), ще ти се връща статус "online", а това може да е пагубно в реална работна постановка. Обърни проверките в скрипта така, че да се връща online само тогава, когато си сигурен, че е така. Полезно би било, ако увеличиш броя на ping-овете и проверяваш как точно върнатият брой пакети отговаря на броя на изпратените. Ако има върнати, но броят им е по-малък от изпратените, да имаш известие и за това, че хостът е достъпен, но има загуби (връзката до него не е добра). Но какво и как е нужно да се добави/промени по скрипта наистина много зависи от това кой и за каква цел ти е дал задачата. Титла: Re: Помощ за Shell script Публикувано от: go_fire в 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 дали работи в изолация или е достъпен и достъпва остатъка от системата. Титла: Re: Помощ за Shell script Публикувано от: 4096bits в Nov 19, 2015, 16:47 Задължително ли трява bash скрипт да е или може и някой друг скриптов език?
И първо, какво означава адреса да е достъпен? Да може да се ping-не, да се изпрати GET или POST заявка и да се получи отговор или пък да се обмненят данни с някое web приложение, което слуша на някакъв адрес? Да речем сървъра да върне просто текст "Hello, World!" например. |