Баш: Услови (ако-тогаш-друго)

Здраво

Овој пат ќе ви покажам како да направите скрипта со состојба во Баш, што во превод е:

Ако X нешто што сакате е завршено, Y акција е направено, ако не е направено, тогаш е направено друго дејство.

Едноставно објаснување не

Сега, размислував неколку минути за некој пример што треба да го искористам во ова упатство, ми се појави следнава дилема / проблем / ситуација:

Ние сме на мрежата на нашата компанија и сакаме да знаеме дали Х компјутер е поврзан на мрежата. За ова правиме а скрипта што ќе стори пинг кон тој компјутер и ако е на мрежа (т.е. ако го врати пинг) ќе ни каже дека ДА, тоа е на мрежата, инаку (т.е. го нема на мрежата) ќе ни каже дека НЕ ​​е на мрежата.

Откако ќе се заврши ова, сега ќе објаснам како да циклусирам со услови

Еве го кодот:

ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

Не грижи се, ќе ти го објаснам ова детално

пинг е командата што ќе ја користиме и ќе ни каже дали тој компјутер е на мрежата. За да кажеме кој компјутер сакаме да провериме дали е или не на мрежата, мора да се смениме АДРЕСА НА ИП со очигледно IP адресата на компјутерот што сакаме да ја провериме.

Како што можете да видите, ставив «-в 1«, Што е потребно за нас. Кога пингуваме компјутер, ова дејство не запира (пинг-пингот) сè додека не се притиснеме [Ctrl] + [C], па ставање «-в 1»Ние ви кажуваме да направите само една проверка (само еден обид за пинг) и никој друг, ова ќе го натера да застане веднаш, тоа е ... ќе провери дали компјутерот е на мрежата само еднаш.

Ако се сомневате во ова, немате болка ... велат тие и со задоволство ќе им објаснам повторно

Сега доаѓа циклусот, бидејќи она што го објаснив не е ништо повеќе од нормална команда / акција 😀

if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

За да го разберете ова, ќе објаснам еден исклучително важен детал за Баш

Најпознатите од оваа тема може да ме означат како погрешен или нешто слично, но еј, го пишувам за почетници или помалку експерти, се додека тие го разбираат тогаш одлично 😉

Се случува како во Баш тоа е нешто како 0 y 1, тоа е, или сте живи или сте мртви, кога ќе се изврши команда или акција: Или егзекутирани добро Нема проблем (1), или имаше некои проблем или грешка (0).

Ние извршуваме X акција или команда, а она што го сторивме може да се изврши добро или лошо, можеби имаше грешка или не, и тука е деталот 😉

Ако она што го испраќаме да го сториме (во овој случај: пинг-c 1 IP-адреса) не даде грешка и беше успешна, па ќе ја врати вредноста: 1 . Во спротивно, и ако дејството (т.е. пинг-пингот) не беше успешно, ќе врати вредност 0.

 И, конечно, она што значи горенаведениот код е ова:

Ако тогаш се врати вредноста 0

Прикажи го текстот: «Не е на мрежа»

Инаку (и вратете НЕ 0, туку 1)

Прикажи го текстот: «Ако е во мрежа«

Ова што штотуку ви го објаснив, ќе ни служи во иднина за многу работи, бидејќи навистина е корисно да може да се каже дека ако X-акција даде грешка, направете Y-а, а во случај X-дејството да не даде грешка, а потоа направи Z акција.

Знам дека некои може малку да се вклучат, па затоа се обидов да го објаснам тоа на неколку различни начини, обидувајќи се да ги натерам сите да го разберат на еден или друг начин. Во случај некој да остане во недоумица, нека ме извести.

Сега, ајде да ја направиме нашата скрипта

Ние мора да ги следиме чекорите во ова упатство: Баш: Како да направите извршна скрипта

Потоа, ајде да го копираме следниот код во таа датотека (скрипта.ш), и на крајот да речеме «излезете»(Без наводници):

ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

Треба да изгледа вака (запомнете дека тие сигурно ја сменија IP-адресата во IP што ја сакаат):

Овде можете да ја видите скриптата што работи:

% КОД 1%

 

Како што можете да видите, на крајот тој ни вели «Да, тоа е во мрежа»

Она што е важно тука е дека тие навистина го разбираат ова за условите, затоа ви оставам друг код за да го објасните повторно, но од друга гледна точка.

read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi

Што значи ова е едноставно, го оставам образложението линија по линија:

1-та линија: Она што го пишуваме, тоа ќе биде вредноста на променливата «текст»(Без наводници).

2-ри ред: Проверете дали е содржината на променливата (она што штотуку го напишавме) 3.

3-та линија: Во случај да биде 3, ќе ни го покаже текстот «Поправете»(Без наводници).

4-та линија: Инаку (тоа е, во случај да не сме напишале 3).

5-та линија: Usе ни го покаже текстот «Погрешно»(Без наводници).

6-та линија: Крај на состојбата.

Како што тие беа во можност да сфатат, ако ставиме пропушти а потоа помеѓу двојни понуди («) текст, ова ќе предизвика тој текст да биде прикажан во терминалот. Тоа е, ако ставиме:

echo "esto es una prueba"

Usе ни го покаже текстот во терминалот: ова е тест

Но, навраќајќи се на овој втор пример, ќе ви ја покажам корисноста (и извршувањето) на оваа втора скрипта со нешто МНОГУ едноставно…… типично «колку е 1 + 2?«

Го оставам кодот на целосната скрипта:

#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit

Еве како работи сценариото:

% КОД 2%

 

И добро ... ништо повеќе за додавање.

Ова е нешто основно, едноставно да, но сепак се обидов да го објаснам што е можно подобро, бидејќи не секој има душа на програмер, и многу пати треба да правиме скрипти како овие (или слични), во секој случај јас се надевам дека овој напис ќе ви биде корисен некој

Секое сомневање или прашање, поплака или предлог ве молам, оставете го тука, јас со задоволство ќе ви одговорам и на тој начин, сите учиме малку повеќе

Со почит


Содржината на статијата се придржува до нашите принципи на уредничка етика. За да пријавите грешка, кликнете овде.

26 коментари, оставете ги вашите

Оставете го вашиот коментар

Вашата е-маил адреса нема да бидат објавени. Задолжителни полиња се означени со *

*

*

  1. Одговорен за податоците: Мигел Анхел Гатон
  2. Цел на податоците: Контролирајте СПАМ, управување со коментари.
  3. Легитимација: Ваша согласност
  4. Комуникација на податоците: Податоците нема да бидат соопштени на трети лица освен со законска обврска.
  5. Складирање на податоци: База на податоци хостирани од Occentus Networks (ЕУ)
  6. Права: Во секое време можете да ги ограничите, вратите и избришете вашите информации.

  1.   Jелави dijo

    Вие сте про !!! * или *

    1.    КЗКГ ^ Гаара dijo

      Не за ништо nothing
      Ако ви служеше и е интересно, задоволен сум

      Поздрав пријателе

  2.   соодветна dijo

    @ KZKG ^ Гаара,
    зборувајќи за баш-програмирање, имам едно прашање:
    Која е разликата помеѓу прогласување на варијабла како оваа VAR = здраво и нејзино декларирање VAR = $ {VAR: -hello}?

    Објаснувам:
    http://pastebin.com/a3cfWXeD

    поздрав

    1.    КЗКГ ^ Гаара dijo

      Здраво
      Па, јас воопшто не сум експерт за баш ... всушност, немам идеја ЛОЛ !!
      Како што ги прогласувам променливите, вака е:
      : ${OPTFOLDER:="/opt/"}

      Но, бидејќи јас секогаш го правев тоа вака, не знам каква разлика може да биде искрено

  3.   соодветна dijo

    @ KZKG ^ Гаара
    Па, го поставив прашањето бидејќи вистината е дека и јас не знаев, јас обично пишувам SlackBuilds и вистината е дека променливите декларирани како во VAR1 изобилуваат со овие скрипти. Брзо пребарување на Google ми помогна да го разјаснам ова прашање, го споделувам со сите за да можеме сите да научиме:

    Скрипта:
    http://pastebin.com/faAQb35w

    Објаснување:
    Декларирање на променливи на образецот VAR = $ {VAR: -default_value} значи дека променливата VAR ќе ја земе вредноста default_value ако и само ако вредноста е нула или не постои.

    Практичен пример:
    При извршување на скриптата, се бара да се внесе вредност што треба да се зачува во VAR променливата, ако нешто е внесено, тоа ќе покаже што е внесено. Ако не внесеме ништо и притиснеме enter, ние ја прогласуваме променливата VAR за ништовна, затоа таа покажува value_default.

    Поздрав.

    1.    КЗКГ ^ Гаара dijo

      ХАХА не знаев дека
      Добро, многу ти благодарам пријателе ... на тоа мислев на крајот од статијата, немам намера да учам нешто и тоа е тоа, знам дека тука секогаш ќе учам нешто ново

      Поздрав и благодарност уште еднаш.

      1.    соодветна dijo

        во право си, овде учи неколку работи.

        честитки и среќни празници !! 😀

  4.   Лукас Матијас dijo

    Страшно и одлично објаснето +1, времето кога ќе ве однесе ...
    но вредам за напор

    1.    КЗКГ ^ Гаара dijo

      Јас всушност напишав 80% за само 1 ден, ми требаше толку време да го објавам само затоа што мојот Интернет не ми дозволуваше.
      Ви благодариме за вашиот коментар

  5.   Хуго dijo

    Друг начин да го направите тоа е користење на DNS, бидејќи понекогаш мрежите имаат блокиран протокол ICMP:

    (домаќин -ta IP-адреса> / dev / null 2> & 1) && ехо „Поврзано со мрежа“

    Исто така, ќе забележите дека во овој пример проверката на повратната вредност е имплицитна

    1.    КЗКГ ^ Гаара dijo

      Вие како и секогаш пријател, со совети што не ги познавам целосно ХАХАХА.
      Ви благодарам, коментарот е ценет и хехе ... уште една нова работа што ја учам

  6.   Датукс dijo

    Благодарам

    🙂

  7.   Лепер_Иван dijo

    И покрај тоа што поминаа неколку дена од објавувањето на оваа тема, таа многу ми послужи, сега кога направив сценарио во баш. Благодарам Гаара ..

  8.   Едгар наваро dijo

    Док. Благодарам за помошта што ми ги разјасни работите.

    Само пребарување, како да направам така што кога едниот компјутер ќе престане автоматски да пингува, другиот да ја смени IP. Го имам ова.

    за промена на IP
    #! / корпа за отпадоци / баш
    ping -c 10 192.168.1.50 # Ако не пинира автоматски
    ifconfig eth0 192.168.1.50 нет-маска 255.255.255.0 емитува 192.168.1.0
    ifconfig eth0 надолу
    ifconfig eth0 горе

  9.   Абрахам dijo

    затоа што кога се споредува со прашалникот ако се користи? каква разлика постои помеѓу ставањето на? кое било друго писмо

    1.    КЗКГ ^ Гаара dijo

      $? значи „претходниот излез или излез“, тоа е, во случај резултатот од претходната наредба ...

      1.    Andrew dijo

        Постои и друг начин да се постигне истиот резултат, поминувајќи ја командата за пинг директно како аргумент до:

        ако пинг-c 1 IP-адреса; тогаш
        ехо „Да, тоа е на мрежата“
        друго
        ехо „Не на мрежата“
        fi

        Она што се случува е дека ако ја процени повратната вредност на командата што ја донесувате како аргумент, ако врати 0, тогаш е точно, што било друго е неточно. Квадратните загради се еквивалентни на командната тест. Но, можете да ја предадете секоја команда како аргумент (се додека командата врати некоја вредност).

  10.   Со почит dijo

    Здраво, како можам да извршам скрипта.sh со корисник X во скриптата, создавам корисник Y, и тој корисник Y продолжува да ја извршува скриптата.sh

    Дали може да се направи ова ??

  11.   Куктос dijo

    Многу интересно, благодарам!

  12.   Франциско dijo

    Благодарам за придонесот, поминав еден час да го разберам xD, но го разбрав !!!!.

  13.   Елој dijo

    Сценариото е добро. Аритметички, може да се направи и како ($? == 0) ако е еднакво на нула, не е на мрежата, инаку е на мрежата. И, ако сепак сакаме да го направиме тоа малку поинтерактивно, можеме да кажеме:
    echo -n Внесете ја IP-адресата:
    прочитај ip
    пинг -c 1 $ IP

  14.   Dario dijo

    Здраво, јас сум многу нов во ова, се обидувам да направам број на билет (алфанумерички) преку читање и сакам ако внесениот да има точен формат (ABC-123456) да изврши команда "x" и да не ' Знам како да го направам тоа, дали можеш да ми помогнеш?

    ехо „Внесете билет“
    прочитај -p билет

    ако $ билет = "нема идеја (формат ABC-123456"); потоа cp file.txt $ билет; друго ехо „погрешен формат, обидете се повторно“; чита -ст; фи

    Секако дека е ужасно и тие се смеат хаха, но како што реков, јас само што започнав со ова.

    Ако лошо објаснам, те молам кажи ми и се обидувам да направам подобро.

    Прегрни ги сите.

  15.   Хумберто Ј dijo

    Одлично објаснување, поздрав

  16.   агилен dijo

    Малку се сомневам во ако, друго и други.
    Сакам скрипта да проверам дали постои датотека (еден од дневниците) и ако не, да ја креирам и подоцна да пишувам во неа. Но, ако постои, сакам само да му пишете.

    Она што го имам е:

    датум = `датум -R`
    #Јас тестирав променлива датум, која не се ажурира помеѓу почетокот на a
    #процес и завршува, понекогаш може да помине еден час и да не излезе точното време.

    ако [-f /home/user/logs/test.log];
    потоа
    допрете /home/usuario/logs/test.log
    друго
    ехо „$ датум: Ажурирано“ >> /home/user/logs/test.log
    ехо «———————————————-» >> /home/user/logs/test.log
    fi

    Теоретски би требало да е во ред, но реалноста е дека не се ажурира ако референцираната датотека веќе постои

    1.    агилен dijo

      извини видов дека не е пратен и се дуплира