Bash: Betingsten (as-dan-oars)

Hallo 😀

Dizze kear sil ik jo sjen litte hoe't jo in skript meitsje kinne mei tastân yn Bash, dat oerset is:

As X-ding dat jo wolle is foltôge, wurdt Y-aksje dien, as it net wurdt foltôge, wurdt in oare aksje dien.

Ienfaldige útlis nee 😀

No haw ik in pear minuten tocht oer wat foarbyld om te brûken yn dizze tutorial, it folgjende dilemma / probleem / situaasje kaam my foar:

Wy binne op it netwurk fan ús bedriuw, en wy wolle witte as X-kompjûter ferbûn is mei it netwurk. Hjirfoar meitsje wy in skrift wat sil hy dwaan ping nei dy kompjûter, en as it op in netwurk is (dat is, as it de ping) sil ús fertelle dat JA, it is op it netwurk, oars (dat is net op it netwurk) sil it ús fertelle dat it NET op it netwurk is.

As dit ienris is dien, sil ik no útlizze hoe't ik mei betingsten cycle fytse kin

Hjir is de koade:

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

Meitsje dy gjin soargen, ik sil jo dit yn detail útlizze 😉

ping is it kommando dat wy sille brûke, en it sil ús fertelle as dizze PC op it netwurk is. Om jo te fertellen hokker PC wy wolle kontrolearje as it op it netwurk is of net, moatte wy feroarje IP ADRESS troch fansels, it IP-adres fan 'e PC dat wy wolle kontrolearje.

Sa't jo sjen kinne, sette ik «-c 1«, Wat foar ús nedich is. As wy in kompjûter pingje, stopt dizze aksje (de ping) net foardat wy ússels drukke [Ctrl] + [C], dus sette «-c 1»Wy fertelle jo dat jo mar ien ferifikaasje moatte dwaan (mar ien pingpoging) en gjin oar, dit sil it direkt stopje, dat is ... it sil kontrolearje as de kompjûter mar ien kear op it netwurk is.

As jo ​​hjir twifel oer hawwe, gjin pine ... se sizze dat en ik sil it jo graach wer útlizze 😉

No komt de syklus, want wat ik krekt ferklearre is neat oars dan in normaal kommando / aksje 😀

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

Dat jo dit begripe, sil ik in heul wichtich detail fan Bash explain útlizze

De kundichste fan it ûnderwerp koe my as ferkeard of sokssawat markearje, mar hey, ik skriuw dit foar de begjinners as minder saakkundigen, sa lang as se it begripe dan geweldich geniaal

It bart dat lykas yn Bash it is sokssawat as 0 y 1, dat is of jo libje of jo binne dea, as in kommando as aksje wurdt útfierd: Of goed útfierd Gjin probleem (1), as der wie wat probleem of fersin (0).

Wy fiere X-aksje of kommando út, en wat wy diene is miskien goed of min útfierd, it hat miskien in flater of net, en dit is wêr't it detail is 😉

As wat wy stjoere om te dwaan (yn dit gefal: ping -c 1 IP-ADRES) joech gjin flater en wie suksesfol, dus sil de wearde weromjaan: 1 , Oars, en as de aksje (dat is de ping) net suksesfol wie, sil dizze wearde weromjaan 0.

 En as lêste, wat de boppesteande koade betsjuttet is dit:

As wearde 0 dan werombrocht waard

Toan de tekst: «Net op netwurk»

Oars (en NET 0, mar 1 wurdt weromjûn)

Toan de tekst: «As it yn netwurk is«

Dit dat ik jo krekt haw útlein, sil ús yn 'e takomst foar in soad dingen tsjinje, om't it echt nuttich is om te sizzen dat as X-aksje in flater joech, Y-aksje dwaan, en as X-aksje gjin flater hat jûn, lit Z-aksje.

Ik wit dat guon miskien wat ferbjustere wurde, dat ik haw it op ferskate manieren besocht út te lizzen, en besykje elkenien it op ien of oare manier te begripen. As immen yn twifel bliuwt, lit my witte.

Litte wy no ús skript meitsje 😀

Wy moatte de stappen yn dit tutorial folgje: Bash: Hoe meitsje jo in útfierber skript

Litte wy dan de folgjende koade kopiearje yn dat bestân (script.sh), en oan 'e ein litte wy sizze «útgong»(Sûnder de oanhellings):

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

It soe der sa útsjen moatte (tink derom dat jo de IP-ADDRESS moatte hawwe feroare nei it IP dat jo wolle):

Hjir kinne jo it rinnende skript sjen:

% CODE1%

 

As jo ​​sjogge, fertelt hy ús op it lêst «Ja it is yn netwurk»🙂

It wichtige ding hjir is dat se dit eins begripe fan 'e betingsten, dat ik lit jo in oare koade om it nochris út te lizzen, mar fanút in oar eachpunt.

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

Wat dit betsjuttet is ienfâldich, ik lit de útlis rigel foar rigel litte:

1e rigel: Wat wy skriuwe, dat sil de wearde wêze fan 'e fariabele «texting»(Sûnder de oanhellings).

2e rigel: Kontrolearje oft de ynhâld fan 'e fariabele (wat wy krekt skreaun hawwe) is 3.

3e rigel: Yn gefal fan wêzen 3, it sil ús de tekst sjen litte «Correcto»(Sûnder de oanhellings).

4e rigel: Oars (dat is, yn it gefal dat wy 3 net skreaun hawwe).

5e rigel: It sil ús de tekst sjen litte «Ferkeard»(Sûnder de oanhellings).

6e rigel: Ein fan tastân.

Hoe koene se har realisearje, as wy sette echo en dan tusken dûbele oanhellings («) in tekst, dit soarget derfoar dat dy tekst wurdt werjûn yn 'e terminal. Dat is, as wy sette:

echo "esto es una prueba"

It sil ús de tekst yn 'e terminal sjen litte: dit is in test

Mar weromgean nei dit twadde foarbyld, sil ik jo it nut (en útfiering) fan dit twadde skript sjen litte mei wat heul ienfâldich 😀 ... it typyske «hoefolle is 1 + 2?«

Ik lit de koade fan it folsleine skript litte:

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

Hjir is hoe't it skript wurket:

% CODE2%

 

En goed ... neat mear ta te foegjen.

Dit is wat elemintêr, ienfâldich ja, mar dochs haw ik besocht it sa goed mooglik út te lizzen, om't net elkenien de siel hat fan in programmeur, en in protte kearen moatte wy skripts meitsje lykas dizze (of ferlykber), yn elk gefal ik hoopje dat dit artikel nuttich is foar jo someone

Elke twifel of fraach, klacht as suggestje asjebleaft, lit it hjir, ik sil jo graach antwurdzje en sadwaande leare wy allegear wat mear 😀

groetnis


De ynhâld fan it artikel hâldt him oan ús prinsipes fan redaksje etyk, Om in flater te melden klikje hjir.

26 opmerkingen, lit jo

Lit jo reaksje efter

Jo e-mailadres wurdt net publisearre.

*

*

  1. Ferantwurdlik foar de gegevens: Miguel Ángel Gatón
  2. Doel fan 'e gegevens: Control SPAM, kommentaarbehear.
  3. Legitimaasje: jo tastimming
  4. Kommunikaasje fan 'e gegevens: De gegevens wurde net oan tredden kommunisearre, útsein troch wetlike ferplichting.
  5. Gegevensopslach: Databank hoste troch Occentus Networks (EU)
  6. Rjochten: Op elk momint kinne jo jo ynformaasje beheine, herstelle en wiskje.

  1.   jhals sei

    Jo binne in pro !!! *of*

    1.    KZKG ^ Gaara sei

      Nee foar neat 😀
      As it jo tsjinne en it is ynteressant, bin ik tefreden 😉

      Groetnis freon

  2.   proper sei

    @ KZKG ^ Gaara,
    sprekke fan bash-programmearring haw ik in fraach:
    Wat is it ferskil tusken it ferklearjen fan in fariabele lykas dizze VAR = hallo en deklarearje as dizze VAR = $ {VAR: -hello}?

    Ik ferklearje:
    http://pastebin.com/a3cfWXeD

    groetnis 😉

    1.    KZKG ^ Gaara sei

      Hallo 😀
      No, ik bin hielendal gjin ekspert yn bash ... eins, ik ha gjin idee LOL !!
      As ik de fariabelen ferklearje, is it sa:
      : ${OPTFOLDER:="/opt/"}

      Mar om't ik it altyd sa die, wist ik net wat it ferskil earlik kin wêze 🙁

  3.   proper sei

    @ KZKG ^ Gaara
    No, ik haw de fraach steld, om't de wierheid is dat ik ek net wist, ik skriuw SlackBuilds normaal en de wierheid is dat fariabelen ferklearre as yn VAR1 yn dizze skripts yn oerfloed. In rappe google-sykopdracht holp my dizze fraach te ferdúdlikjen, ik diel it mei elkenien, sadat wy allegear kinne leare:

    Skrift:
    http://pastebin.com/faAQb35w

    Ferklearring:
    Fariabelen ferklearje fan 'e foarm VAR = $ {VAR: -default_value} betsjut dat de fariabele VAR de wearde default_value nimt as en allinich as de wearde nul is of net bestiet.

    Praktysk foarbyld:
    By it útfieren fan it skript wurdt frege om in wearde yn te fieren dy't moat wurde opslein yn 'e VAR-fariabele, as der wat wurdt ynfierd, sil it sjen litte wat ynfierd is. As wy neat ynfiere en op enter drukke, ferklearje wy de fariabele VAR as nul, dêrom lit it value_default sjen.

    Groetenis.

    1.    KZKG ^ Gaara sei

      HAHA dat wist ik net 😀
      Ok, tige tank freon ... dat is wat ik bedoelde mei de ein fan it artikel, ik bin net fan doel om wat te learen en dat is it, ik wit dat ik hjir altyd wat nijs sil learje 😀

      Groetnis en nochris tank.

      1.    proper sei

        do hast gelyk, men leart hjir ferskate dingen.

        groetnis en lokkige fakânsje !! 😀

  4.   Lucas Matthias sei

    Geweldich en poerbêst útlein +1, de tiid dat it jo sil hawwe ...
    mar ik bin de muoite wurdich 😉

    1.    KZKG ^ Gaara sei

      Ik skreau eins 80% yn just 1 dei, it duorre my sa lang om it te publisearjen krekt om't myn ynternet my net liet.
      Tank foar jo reaksje comment

  5.   hugo sei

    In oare manier om it te dwaan is it brûken fan DNS, om't soms netwurken it ICMP-protokol blokkeare:

    (host -ta IP-ADDRESS> / dev / null 2> & 1) && echo "Ferbûn mei netwurk"

    Jo sille ek fernimme dat yn dit foarbyld de retoerweardekontrôle ymplisyt is 😉

    1.    KZKG ^ Gaara sei

      Jo lykas altyd freon, mei tips dy't ik HAHAHA net folslein ken.
      Tank, it kommentaar wurdt wurdearre en hehe ... in oar nij ding dat ik lear 😀

  6.   Datum sei

    Gracias

    🙂

  7.   Leper_Ivan sei

    Ek al binne ferskate dagen foarby gien sûnt de publikaasje fan dit ûnderwerp, it hat my in soad tsjinne, no't ik in skript yn bash makke .. Bedankt Gaara ..

  8.   Edgar navarro sei

    Dok. Tankewol foar de help dy't jo dingen dúdlik foar my makken.

    Gewoan in fraach, hoe doch ik dat as de iene kompjûter automatysk stopt mei pingen, de oare IP feroaret. Ik haw dit.

    om it IP te feroarjen
    #! / bin / bash
    ping -c 10 192.168.1.50 # as it net automatysk pinget
    ifconfig eth0 192.168.1.50 netmask 255.255.255.0 útstjoering 192.168.1.0
    ifconfig eth0 omleech
    ifconfig eth0 op

  9.   Abraham sei

    want as jo fergelykje mei it as jo it fraachteken brûke? wat ferskil is der tusken setten de? elke oare brief

    1.    KZKG ^ Gaara sei

      $? betsjut 'de foarige útfier of útfier', dat is, yn it gefal it resultaat fan it foarige kommando ... 🙂

      1.    andrew sei

        D'r is in oare manier om itselde resultaat te berikken, it ping-kommando direkt troch te jaan as argumint oan as:

        as ping -c 1 IP-ADDRESS; dan
        echo "Ja, it is op it net"
        oars
        echo "Net op it netwurk"
        fi

        Wat bart is dat as de weromwearde fan it kommando dat jo trochjaan as argumint evalueart, as it 0 retourneert is it wier, is alles oars falsk. De heakjes binne gelyk oan it testkommando. Mar jo kinne elk kommando trochjaan as argumint (sa lang as it kommando wat wearde jout).

  10.   groetnis sei

    Hallo, hoe fier ik in script.sh út mei in brûker X yn it skript meitsje ik in brûker Y, en dy brûker Y bliuwt it script.sh útfiere

    Kin dit wurde dien ??

  11.   Kuktos sei

    Hiel nijsgjirrich, tank!

  12.   Francisco sei

    Tank foar de bydrage, ik haw in oere west om it xD te begripen, mar ik begryp it !!!!.

  13.   Eloy sei

    It skript is prima. Aritmetysk kin it ek dien wurde as ($? == 0) as it gelyk is oan nul is it net op it netwurk, oars is it op it netwurk. En as wy it noch wat ynteraktiver meitsje wolle, kinne wy ​​sizze:
    echo -n Fier it IP yn:
    lês ip
    ping -c 1 $ ip

  14.   Dario sei

    Hallo, ik bin hjir heul nij, ik besykje in kaartsjesnûmer (alfanumeryk) te meitsjen fia in lêzen en ik wol dat as wat ynfierd wurdt it juste formaat hat (ABC-123456) in "x" kommando útfiere en ik wit net hoe't ik it moat dwaan, koene jo my helpe?

    echo "Ticket ynfiere"
    lêzen -p ticket

    as $ ticket = "gjin idee (ABC-123456-formaat"); dan cp file.txt $ ticket; oars echo "Ferkeard formaat, besykje it nochris"; lêze -p; fi.

    Wis is it ferskriklik en se laitsje haha, mar lykas ik sei begjin ik hjir gewoan mei.

    As ik min ferklearje, fertel my dan asjebleaft en ik besykje better te dwaan.

    Hug elkenien.

  15.   Umberto Y sei

    Poerbêst útlis, groetnis

  16.   agile sei

    Ik haw in bytsje twifel mei as, oars en oaren.
    Ik wol in skript om te kontrolearjen dat in bestân bestiet (ien fan logs) en sa net, om it te meitsjen en letter nei it te skriuwen. Mar as it bestiet, wol ik dat jo der mar nei skriuwe.

    Wat ik haw is:

    date = `date -R`
    #Ik testen fariabele datum, dat wurdt net bywurke tusken it begjin fan in
    #proses en einiget, soms kin der in oere foarby gean en komt de juste tiid net út.

    as [-f /home/user/logs/test.log];
    dan
    touch /home/usuario/logs/test.log
    oars
    echo "$ datum: Updated" >> /home/user/logs/test.log
    echo «———————————————» >> /home/user/logs/test.log
    fi

    Yn teory moat it goed wêze, mar de realiteit is dat it net bywurke wurdt as it ferwiisde bestân al bestiet

    1.    agile sei

      sorry, Ik seach dat it waard net ferstjoerd en it hat ferdûbele