Титла: моля за малко помощ bash -> присвояване на стойност от /dev/null Публикувано от: loshiat в Jul 21, 2012, 17:23 Здравейте. Имам следното:
route show | grep 'default' | grep -w "koko" > /dev/null az=$( printf "$?" ) az присвоява стойност 1 ако няма думата коко или 0 ако я има. Това което искам да направя е всичко да бъде на един ред. Опитах много начини но нещо ми убягва. Мислех че така ще стане но уви не, az=$( printf "$?" | route show | grep 'default' | grep -w "koko" > /dev/null ) ....къде греша? Титла: Re: моля за малко помощ bash -> присвояване на стойност от /dev/null Публикувано от: dejuren в Jul 21, 2012, 20:19 Не знам къде точно грешиш, но резултата който искаш да постигнеш може да се получи така:
Код: az=$( route show | grep 'default' | grep -vcw "koko" ) Най-добре обаче дай повече информация какво правиш, може някой да ти предложи различно по-ефективно решение, защото от това което виждам да ползваш променлива за true/false, която е кода на грешката от предната команда, и след което веднага да забравиш за нея няма много смисъл. Освен това конструкцията az=$( printf "$?" ) изглежда опасно и страховито за толкова просто нещо като проверка с grep, защо не направо az=$? като се е почнало? Титла: Re: моля за малко помощ bash -> присвояване на стойност от /dev/null Публикувано от: dev_urandom в Jul 21, 2012, 23:56 @Loshiat, като правиш pipe получаваш резултата от последната команда, не гледай от ляво :)
P.S. От /dev/null не очаквай резултати , (не) пробвай с /dev/zero Титла: Re: моля за малко помощ bash -> присвояване на стойност от /dev/null Публикувано от: bop_bop_mara в Jul 22, 2012, 00:19 Малко ще повторя думите на dejuren....
За какво ще използваш az? В смисъл, ако ти трябва нещо от сорта на: Код
променливата az=$(printf "$?") не ти трябва, не ти трябва и if [ $? -eq 0 ]: Код
//offtopic grep -w "koko" > /dev/null може да го смениш с grep -q -w "koko". Титла: Re: моля за малко помощ bash -> присвояване на стойност от /dev/null Публикувано от: loshiat в Jul 22, 2012, 12:06 Благодаря на всички. Всички начини ми вършат работа. Исках да проверява default Gateway кой е , защото имам 2 ISP-та и да прави разни работи...
bob багодаря за цитата на Geshi , това if route show | grep 'default' | grep -w "koko" > /dev/null then #do something else #do another thing fi така написано не съм го виждал но при 0 идва then ако не отива на else. Тази проверка е която ми трябва. Направих няколко опита за да разбера как точно работи. Благодаря на всички отново. Титла: Re: моля за малко помощ bash -> присвояване на стойност от /dev/null Публикувано от: bop_bop_mara в Jul 23, 2012, 02:39 Да, по принцип за "условия" на if, while, until се поставя команда/списък от команди/pipeline, тя/той се изпълнява и, ако е успешен (т.е. завърши със статус 0), се изпълняват командите в then (иначе, в else, ако има такъв). Отделно има възможност и за elif (ако главното "условие" завърши с неуспех, друга проверка).
Ето линк: http://pubs.opengroup.org/onlinepubs/009604499/utilities/xcu_chap02.html#tag_02_09_04_07 Използването на командата test ([]) за условия е само частен случай, но мнозина, може би по аналогия с други програмни езици, прилагат винаги и само нея. Аз лично наскоро срещнах следната бруталност: Код (И дълго време не можех да повярвам какво виждат очите ми...) Титла: Re: моля за малко помощ bash -> присвояване на стойност от /dev/null Публикувано от: romeo_ninov в Jul 23, 2012, 06:22 ...... Аз лично наскоро срещнах следната бруталност:Марче, прости ми, но не виждам каква е бруталността, освен използването на = вместо -eq за сравняване на числови стойности Останалото е добър и четим стил на писане. Или трябва да е криптирано подобно на пърл? Титла: Re: моля за малко помощ bash -> присвояване на стойност от /dev/null Публикувано от: gat3way в Jul 23, 2012, 09:12 Мисля, че на perl условните оператори са от малкото четливи и еднозначни неща, чак досаднo. Примерно кода за всяко условие трябва да се затваря в собствен блок, дори да е само един ред и това ужасно дразни ако си свикнал с волностите на C. Освен което за разлика от bash скриптовете няма чак толкова идиотски особености, като например в колко скоби е затворено условието.
Титла: Re: моля за малко помощ bash -> присвояване на стойност от /dev/null Публикувано от: bop_bop_mara в Jul 25, 2012, 12:10 romeo, ами за мен е глупаво - пускаш команда, взимаш си отделна променлива, в която да запишеш стойността на друга променлива ($?), и проверяваш дали тази стойност е exit status успех. След като може просто командата да е като условие на if и да си спестиш и допълнителната променлива, и извикването на test. За = и -eq, отделно.
Освен това считам за неправилно това човек да твърди, че владее няколко езика за програмиране, след като нивото му на владение е просто транслиране на съответните граматически конструкции. Т.е. това, което на C ще напише като Код на bash да го изразява с показания код. И само ако се сети, че на C може всъщност да ползва и варианта if(function())/if(!function()), да се сети, че и на bash може директно да сложи команда, различна от test, в условието. Всеки език си има свой стил, дух, начин на използване, начин на действие. За мен познаването на тези неща във всеки отделен език са пряко свързани с писането на оптимален код на него. Хора без такива познания или са програмисти на езика X, или са програмисти на псевдокод с механизъм Google Translate на езика Y. Аз не твърдя, че съм специалист относно това какъв е стила на bash или на някой друг език - опитвам се да се основавам на примери и мнения. Например си спомням (и следвам) съвета на един наш преподавател (с достатъчно качества и авторитет, че да му повярвам), който ни каза на C да не правим неща като if(function()) - да си бъде if(function() != 0). В ситуацията за bash на мен логически по-правилно и четимо ми е if command, вместо command; if [ $? -eq 0 ]. Отделно, че има хора, които не са наясно, че конвенцията е една програма при успех да завърши със статус 0 (EXIT_SUCCESS), а при грешка - със статус положително число. :D Не че ги оправдавам, де. ;) И ако command; if [ $? -eq 0 ] може просто да не е по мой вкус (наистина, не мога да твърдя, че е правилен или неправилен стил), то command ; result=$?; if [ $result -eq 0 ] наистина го считам за излагация. Титла: Re: моля за малко помощ bash -> присвояване на стойност от /dev/null Публикувано от: romeo_ninov в Jul 25, 2012, 12:29 romeo, ами за мен е глупаво - пускаш команда, взимаш си отделна променлива, в която да запишеш стойността на друга променлива ($?), ...Готов съм да се съглася за "транслирането" на логика от един език към друг, само че при шеловете такава конструкция: result=$?; if [ $result -eq 0 ] Има своя смисъл като например комбиниране на няколко логически условия, използване по-късно в кода, стигайки даже до увеличаване абстракцията и параметризиране на кода. А и е по-читаемо (поне за мен :) ) Титла: Re: моля за малко помощ bash -> присвояване на стойност от /dev/null Публикувано от: bop_bop_mara в Jul 25, 2012, 16:03 Готов съм да се съглася за "транслирането" на логика от един език към друг, само че при шеловете такава конструкция:Да, за по-сложни сценарии спор няма. Но в случая говорим за елементарното - ако една команда е успешна, правим нещо; ако не - (евентуално) правим друго. Без нищо повече в контекста. В такъв случай на мен дългото излияние ми става по-нечетимо, понеже обичам кратко и точно да са изказани нещата. Сигурно е въпрос на вкус, но аз не го одобрявам... Титла: Re: моля за малко помощ bash -> присвояване на стойност от /dev/null Публикувано от: VladSun в Aug 25, 2012, 00:58 Например си спомням (и следвам) съвета на един наш преподавател (с достатъчно качества и авторитет, че да му повярвам), който ни каза на C да не правим неща като if(function()) - да си бъде if(function() != 0).Мдам, има известна логика ... По принцип не бих се съгласил да ползвам "if (isLoggedIn() !=0 ) {...}" вместо първия вариант, но ... заради спецификата на езика С не виждам как ще се реализира по друг начин error handling-а при липсата на Exceptions. Въпреки това, за езици, които поддържат Exception, гореспоменатият вариант е твърде неприемлив за мен. Но пак опираме до спецификата на използвания език... Титла: Re: моля за малко помощ bash -> присвояване на стойност от /dev/null Публикувано от: груйо в Aug 25, 2012, 05:52 //offtopic
gat3way, да напишеш Perl и "волности" на С в едно изречение е престъпление. Донякъде си прав, че ако напишеш нормална if конструкция, трябва да я заградиш в скоби, но все пак Perl е език в който можеш да напишеш неща като: Код
Та той не е точно език, който те ограничава. Според много хора основната слабост на езика е прекалената свобода, която позволява. |