Bash: Mga Kundisyon (kung-pagkatapos-iba pa)

Kamusta 😀

Sa oras na ito ipapakita ko sa iyo kung paano gumawa ng isang script na may kundisyon sa Malakas na palo, na isinalin ay:

Kung tapos na ang X bagay na nais mo, tapos na ang pagkilos Y, kung hindi ito nagawa pagkatapos ay gumawa ng isa pang pagkilos.

Simpleng paliwanag hindi 😀

Ngayon, naisip ko ng ilang minuto ang ilang halimbawa upang magamit sa tutorial na ito, ang sumusunod na problema / problema / sitwasyon ay nangyari sa akin:

Nasa network kami ng aming kumpanya, at nais naming malaman kung ang X computer ay konektado sa network. Para sa mga ito gumawa kami ng isang script anong gagawin niya i-ping patungo sa computer na iyon, at kung ito ay nasa isang network (iyon ay, kung ibabalik nito ang i-ping) sasabihin sa amin na YES, nasa network ito, kung hindi man (iyon ay, wala ito sa network) sasabihin nito sa atin na HINDI sa network.

Kapag tapos na ito, ngayon ay ipapaliwanag ko kung paano mag-ikot sa mga kundisyon 🙂

Narito ang code:

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

Huwag magalala, ipapaliwanag ko ito sa iyo nang detalyado 😉

i-ping ay ang utos na gagamitin namin, at sasabihin nito sa amin kung ang PC ay nasa network. Upang sabihin sa iyo kung aling PC ang nais naming suriin kung ito ay nasa network o hindi, dapat kaming baguhin IP ADRESS sa pamamagitan ng malinaw naman ang IP address ng PC na nais naming suriin.

Tulad ng nakikita mo, inilagay ko «-c 1«, Alin ang kinakailangan sa amin. Kapag nag-ping kami ng isang computer, ang aksyon na ito ay hindi hihinto (ang ping) hanggang sa mapilit natin ang ating sarili [Ctrl] + [C], kaya paglalagay «-c 1»Sasabihin namin sa iyo na gawin lamang ang isang pag-verify (isang pagtatangka lamang sa ping) at walang iba pa, gagawin itong huminto kaagad, iyon ay ... susuriin nito kung ang computer ay nasa network lamang ng isang beses.

Kung may pag-aalinlangan ka tungkol dito, walang sakit ... sinabi nila at magiging masaya akong ipaliwanag ulit ito sa iyo 😉

Dumarating na ang pag-ikot, dahil ang ipinaliwanag ko lang ay hindi hihigit sa isang normal na utos / pagkilos 😀

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

Upang maunawaan mo ito, ipapaliwanag ko ang isang napakahalagang detalye ng Bash 🙂

Ang pinaka-nalalaman sa paksa ay maaaring tatak sa akin bilang mali o isang bagay tulad nito, ngunit hey, isinulat ko ito para sa mga baguhan o mas mababa sa mga dalubhasa, hangga't naiintindihan nila ito pagkatapos mahusay

Ito ay nangyayari na tulad ng sa Malakas na palo ito ay isang bagay tulad ng 0 y 1, iyon ay, maaaring ikaw ay buhay o ikaw ay patay, kapag ang isang utos o pagkilos ay naisagawa: Alinman pinaandar nang maayos Walang problema (1), ang may ilan problema o mali (0).

Isinasagawa namin ang X na pagkilos o utos, at kung ano ang aming ginawa ay maaaring natupad nang mabuti o masama, maaaring mayroon itong isang error o wala, at dito naroroon ang detalye 😉

Kung ano ang ipadadala nating gawin (sa kasong ito: ping -c 1 IP-ADDRESS) ay hindi nagbigay ng isang error at matagumpay, kaya ibabalik nito ang halaga: 1 . Kung hindi man, at kung ang pagkilos (iyon ay, ang ping) ay hindi matagumpay, ibabalik nito ang halaga 0.

 At sa wakas, kung ano ang ibig sabihin ng code sa itaas ay ito:

Kung ibinalik ang halagang 0 pagkatapos

Ipakita ang teksto: «Wala sa network»

Kung hindi man (at bumalik HINDI 0, ngunit 1)

Ipakita ang teksto: «Kung nasa network ito«

Ang naipaliwanag ko lang sa iyo, ay magsisilbi sa amin sa hinaharap para sa maraming mga bagay, sapagkat talagang kapaki-pakinabang na masabi na kung ang X na aksyon ay nagbigay ng isang error, gawin ang Y na pagkilos, at kung sakaling ang X na aksyon ay hindi nagbigay ng isang error, pagkatapos ay gawin ang Z action.

Alam ko na ang ilan ay maaaring makisali nang kaunti, kaya sinubukan kong ipaliwanag ito sa maraming iba't ibang mga paraan, sinisikap na maunawaan ito ng lahat sa isang paraan o sa iba pa. Kung sakaling may naiwan sa pag-aalinlangan, ipaalam sa akin.

Ngayon, gawin natin ang ating script 😀

Dapat nating sundin ang mga hakbang sa tutorial na ito: Bash: Paano gumawa ng isang maipapatupad na script

Pagkatapos kopyahin natin ang sumusunod na code sa file na iyon (script.sh), at sa huli sabihin natin «lumabas»(Nang walang mga quote):

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

Dapat ganito ang hitsura nito (tandaan na dapat mong binago ang IP-ADDRESS sa gusto mong IP):

Makikita mo rito ang tumatakbo na script:

% CODE1%

Tulad ng nakikita mo, sa huli sinabi niya sa amin «Oo nasa network ito»🙂

Ang mahalagang bagay dito ay talagang naiintindihan nila ito tungkol sa mga kundisyon, kaya't iniiwan ko sa iyo ang isa pang code upang maipaliwanag ito muli, ngunit mula sa ibang pananaw.

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

Ang ibig sabihin nito ay simple, iniiwan ko ang linya ng paliwanag sa pamamagitan ng linya:

Ika-1 linya: Ang sinusulat namin, iyon ang magiging halaga ng variable «teksto»(Nang walang mga quote).

Ika-2 linya: Suriin kung ang nilalaman ng variable (kung ano ang aming isinulat lamang) 3.

Ika-3 linya: Sa kaso ng pagiging 3, ipapakita nito sa amin ang teksto «Itama»(Nang walang mga quote).

Ika-4 na linya: Kung hindi man (iyon ay, kung sakaling hindi pa namin nakasulat ang 3).

Ika-5 na linya: Ipapakita sa amin ang teksto «Hindi tama»(Nang walang mga quote).

Ika-6 na linya: Pagtatapos ng kundisyon.

Paano nila napagtanto, kung ilalagay natin miss at pagkatapos ay sa pagitan ng mga dobleng quote («) isang teksto, magiging sanhi ito upang maipakita ang teksto sa terminal. Iyon ay, kung inilalagay natin:

echo "esto es una prueba"

Ipapakita sa amin ang teksto sa terminal: ito ay isang pagsubok

Ngunit babalik sa pangalawang halimbawa na ito, ipapakita ko sa iyo ang pagiging kapaki-pakinabang (at pagpapatupad) ng pangalawang iskrip na ito na may isang bagay na SOBRANG simple 😀 ... ang tipikal na «magkano ang 1 + 2?«

Iniwan ko ang code ng kumpletong script:

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

Narito kung paano gumagana ang script:

% CODE2%

At ayun ... wala nang maidaragdag.

Ito ay isang bagay na elementarya, simpleng oo, ngunit sinubukan ko ring ipaliwanag ito hangga't maaari, dahil hindi lahat ay may kaluluwa ng isang programmer, at maraming beses na kailangan naming gumawa ng mga script tulad nito (o katulad), sa anumang kaso Umaasa ako na ang artikulong ito ay magiging kapaki-pakinabang sa iyo may isang tao 🙂

Anumang pagdududa o tanong, reklamo o mungkahi mangyaring, iwanan ito dito, Masaya kong sasagutin ka at sa gayon, lahat tayo ay natututo nang kaunti pa 😀

Regards


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   jhals dijo

    Ikaw ay isang pro !!! * o *

    1.    KZKG ^ Gaara dijo

      Nah for nothing 😀
      Kung nagsilbi sa iyo at ito ay kagiliw-giliw, nasiyahan ako 😉

      Pagbati kaibigan

  2.   angkop dijo

    @ KZKG ^ Gaara,
    nagsasalita ng bash programming Mayroon akong isang katanungan:
    Ano ang pagkakaiba sa pagitan ng pagdedeklara ng isang variable tulad ng VAR = hello at pagdeklara nito tulad ng VAR = $ {VAR: -hello}?

    Ipinapaliwanag ko:
    http://pastebin.com/a3cfWXeD

    bati 😉

    1.    KZKG ^ Gaara dijo

      Kamusta 😀
      Sa gayon, hindi ako dalubhasa sa pag-bash sa lahat ... sa totoo lang, wala akong ideya LOL !!
      Habang idinedeklara ko ang mga variable na ito ay tulad nito:
      : ${OPTFOLDER:="/opt/"}

      Ngunit dahil palagi ko itong nagagawa, hindi ko alam kung ano ang pagkakaiba ng matapat be

  3.   angkop dijo

    @ KZKG ^ Gaara
    Kaya't tinanong ko ang tanong dahil ang totoo ay hindi ko rin alam, kadalasan ay nagsusulat ako ng SlackBuilds at ang totoo ay ang mga variable na idineklara sa VAR1 na sagana sa mga script na ito. Isang mabilis na paghahanap sa google ang tumulong sa akin upang linawin ang katanungang ito, ibinabahagi ko ito sa lahat upang malaman nating lahat:

    script:
    http://pastebin.com/faAQb35w

    Paliwanag:
    Ang pagdedeklara ng mga variable ng form na VAR = $ {VAR: -default_value} ay nangangahulugan na ang variable na VAR ay kukuha ng default_value na halaga kung at kung ang halaga ay null o wala.

    Praktikal na halimbawa:
    Kapag naisakatuparan ang script, hinihiling na magpasok ng isang halaga na maiimbak sa variable ng VAR, kung may ipinasok, ipapakita nito kung ano ang ipinasok. Kung hindi namin ipinasok ang anumang bagay at pindutin ang enter ay ipinapahayag namin ang variable na VAR bilang null, samakatuwid ito ay nagpapakita ng halaga_default.

    Pagbati.

    1.    KZKG ^ Gaara dijo

      HAHA hindi ko alam yun 😀
      Ok, maraming salamat sa kaibigan ... iyon ang ibig kong sabihin sa pagtatapos ng artikulo, wala akong balak magturo ng isang bagay at iyon lang, alam kong palaging may matututunan akong bago dito 😀

      Pagbati at salamat muli.

      1.    angkop dijo

        tama ka, may natututunan dito ng maraming bagay.

        pagbati at maligayang pista opisyal !! 😀

  4.   Lucas Matthias dijo

    Kahila-hilakbot at mahusay na ipinaliwanag na +1, sa oras na aabutin ka ...
    pero sulit ang pagsisikap ko 😉

    1.    KZKG ^ Gaara dijo

      Sinulat ko talaga ang 80% sa loob lamang ng 1 araw, natagalan ako upang mai-post ito dahil lamang sa hindi ako pinayagan ng aking internet.
      Salamat sa iyong komento 😉

  5.   Hugo dijo

    Ang isa pang paraan upang gawin ito ay ang paggamit ng DNS, dahil kung minsan ang mga network ay may naka-block na ICMP protocol:

    (host -ta IP-ADDRESS> / dev / null 2> & 1) && echo na "Nakakonekta sa network"

    Mapapansin mo rin na sa halimbawang ito ang implikasyon ng halagang ibinalik ang implicit 😉

    1.    KZKG ^ Gaara dijo

      Ikaw na laging kaibigan, may mga tip na hindi ko alam ng buong buo HAHAHA.
      Salamat, pinahahalagahan ang komento at hehe ... isa pang bagong bagay na natutunan ko 😀

  6.   Petsa dijo

    Salamat

    🙂

  7.   Leper_Ivan dijo

    Kahit na maraming araw na ang lumipas mula nang mailathala ang paksang ito, marami itong naihatid sa akin, ngayong gumawa ako ng isang script sa bash .. Salamat Gaara ..

  8.   Edgar navarro dijo

    Dok. Salamat sa tulong na ginawa mong malinaw sa akin ang mga bagay.

    Isang query lamang, paano ko magagawa upang kapag ang isang computer ay tumitigil sa pag-ping nang awtomatiko ang iba pang nagbabago ng IP. Meron ako nito.

    upang baguhin ang IP
    #! / bin / bash
    ping -c 10 192.168.1.50 # Kung hindi ito awtomatikong nag-ping
    ifconfig eth0 192.168.1.50 netmask 255.255.255.0 broadcast 192.168.1.0
    ifconfig eth0 pababa
    ifconfig eth0 pataas

  9.   Abraham dijo

    sapagkat kapag naghahambing sa kung ginagamit mo ang tandang pananong? ano ang pagkakaiba sa pagitan ng paglalagay ng? anumang iba pang liham

    1.    KZKG ^ Gaara dijo

      $? nangangahulugang 'ang dating output o output', iyon ay, kung sakaling ang resulta ng nakaraang utos ... 🙂

      1.    Andrew dijo

        May isa pang paraan upang makamit ang parehong resulta, na direktang ipinapasa ang ping command bilang isang argumento kung:

        kung ping -c 1 IP-ADDRESS; tapos
        echo "Oo nasa net"
        iba
        echo "Wala sa network"
        fi

        Ano ang mangyayari ay kung susuriin ang halaga ng pagbalik ng utos na ipinasa mo bilang isang argumento, kung ibabalik nito ang 0 na totoo, anupaman ay mali. Ang mga square bracket ay katumbas ng utos ng pagsubok. Ngunit maaari mong ipasa ang anumang utos bilang isang argument (basta ang utos ay nagbabalik ng ilang halaga).

  10.   Regards dijo

    Kumusta, paano ko maisasagawa ang isang script.sh sa isang gumagamit X sa script na lumilikha ako ng isang gumagamit Y, at ang gumagamit na Y ay patuloy na isinasagawa ang script.sh

    Magagawa ba ito ??

  11.   kuktos dijo

    Napakainteres, salamat!

  12.   Francisco dijo

    Salamat sa kontribusyon, naging isang oras ako upang maunawaan ito xD, ngunit naintindihan ko ito !!!!.

  13.   Eloy dijo

    Mabuti ang script. Sa aritmetika, maaari rin itong gawin bilang ($? == 0) kung ito ay katumbas ng zero wala ito sa network, kung hindi man ay nasa network. At kung nais pa rin nating gawing medyo interactive ito masasabi natin:
    echo -n Ipasok ang IP:
    basahin ip
    ping -c 1 $ ip

  14.   Dario dijo

    Kumusta, napakasariwa ko rito, sinusubukan kong gumawa ng isang numero ng tiket (alphanumeric) sa pamamagitan ng pagbasa at nais kong kung ang ipinasok ay may tamang format (ABC-123456) magpatupad ng isang "x" utos at hindi Hindi mo alam kung paano ito gawin, maaari mo ba akong tulungan?

    echo "Enter ticket"
    basahin -p ticket

    kung $ ticket = "walang ideya (format ABC-123456"); pagkatapos cp file.txt $ ticket; kung hindi man ay i-echo ang "maling format, subukang muli"; basahin -p; fi

    Sure ito ay kakila-kilabot at tumawa sila haha, ngunit tulad ng sinabi ko nagsisimula pa lang ako dito.

    Kung nagpapaliwanag ako nang masama mangyaring sabihin sa akin at sinubukan kong gumawa ng mas mahusay.

    Yakap lahat.

  15.   Umberto Y dijo

    Mahusay na paliwanag, pagbati

  16.   maliksi dijo

    Mayroon akong isang maliit na pagdududa sa kung, iba at iba pa.
    Gusto kong suriin ng isang script kung mayroong isang file (isang log file) at kung hindi, likhain ito at pagkatapos ay sumulat dito. Ngunit kung ito ay umiiral, nais kong sulatan lamang ito.

    Ang mayroon ako ay:

    petsa=`petsa -R`
    #Sinusubukan ko ang variable na petsa, na hindi na-update sa pagitan ng simula ng a
    #proseso at matatapos, minsan nakakalipas ang isang oras at hindi lumalabas ang tamang oras.

    kung [ -f /home/user/logs/test.log ];
    pagkatapos
    pindutin ang /home/user/logs/test.log
    iba
    echo "$date: Updated" >> /home/user/logs/test.log
    echo «———————————————-» >> /home/user/logs/test.log
    fi

    Sa teorya ito ay dapat na maayos, ngunit ang katotohanan ay hindi ito na-update kung ang isinangguni na file ay umiiral na

    1.    maliksi dijo

      pasensya na, nakita kong hindi ito naipadala at ito ay nadoble