Bash: Pogoji (če-potem-drugače)

Pozdravljeni

Tokrat vam bom pokazal, kako naredite skript s pogojem v Bash, kar je prevedeno:

Če je X stvar, ki jo želite narediti, opravljena akcija Y, če ni storjena, je izvedena druga akcija.

Preprosta razlaga št

Zdaj sem nekaj minut razmišljal o kakšnem primeru, ki bi ga uporabil v tej vadnici, pri meni se je pojavila naslednja dilema / problem / situacija:

Smo v omrežju našega podjetja in želimo vedeti, ali je računalnik X povezan z omrežjem. Za to naredimo a script kaj bo naredil ping proti temu računalniku in če je v omrežju (to pomeni, če vrne datoteko ping) nam bo povedal, da DA, v omrežju je, sicer (torej ni v omrežju) nam bo povedal, da NI v omrežju.

Ko bo to storjeno, bom zdaj razložil, kako kolesariti s pogoji 🙂

Tu je koda:

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

Ne skrbite, to vam bom podrobno razložil 😉

ping je ukaz, ki ga bomo uporabili, in nam bo povedal, ali je ta računalnik v omrežju. Če želite povedati, kateri računalnik želimo preveriti, ali je v omrežju ali ne, se moramo spremeniti NASLOV IP očitno z naslovom IP računalnika, ki ga želimo preveriti.

Kot vidite, sem dal «-c 1«, Kar je za nas nujno. Ko pingamo računalnik, se to dejanje ne ustavi (ping), dokler se ne pritisnemo [Ctrl] + [C], torej dajanje «-c 1»Naročimo vam, da opravite samo eno preverjanje (samo en poskus pinga) in nobenega drugega, zaradi česar se bo takoj ustavilo, to je… samo enkrat bo preveril, ali je računalnik v omrežju.

Če dvomite o tem, brez bolečin ... tako pravijo in z veseljem vam to še enkrat razložim

Zdaj prihaja cikel, ker to, kar sem pravkar razložil, ni nič drugega kot običajni ukaz / dejanje 😀

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

Da boste to razumeli, vam bom razložil izjemno pomembno podrobnost Basha 🙂

Najbolj poznavalec tega predmeta bi me lahko označil za napačnega ali kaj podobnega, toda hej, to pišem za začetnike ali manj strokovnjake, če jih potem odlično razumejo

Zgodi se, da kot v Bash to je nekaj takega 0 y 1, to pomeni, da ste bodisi živi ali pa ste mrtvi, ko se izvrši ukaz ali dejanje: Ali dobro izvedli Ni problema (1), Or nekaj jih je bilo problem oz Napaka (0).

Izvajamo X akcijo ali ukaz in to, kar smo storili, je bilo morda izvedeno dobro ali slabo, morda je prišlo do napake ali ne, in tu je podrobnost 😉

Če je tisto, kar pošljemo (v tem primeru: ping -c 1 IP-NASLOV) ni dal napake in je bil uspešen, zato bo vrnil vrednost: 1 . V nasprotnem primeru in če dejanje (to je ping) ni bilo uspešno, bo vrnilo vrednost 0.

 In končno, zgornja koda pomeni to:

Če je bila vrnjena vrednost 0, potem

Prikaži besedilo: «Ni v omrežju»

V nasprotnem primeru (in vrnite NE 0, ampak 1)

Prikaži besedilo: «Če je v omrežju«

To, kar sem vam pravkar razložil, nam bo v prihodnosti služilo za marsikaj, ker je res koristno, če lahko rečemo, da če je X dejanje povzročilo napako, naredite Y dejanje in če X dejanje ni dalo napaka, nato pa ukrepajte Z.

Vem, da se nekateri morda malo zapletejo, zato sem poskušal to razložiti na več različnih načinov, tako da sem ga tako ali drugače razumel. Če kdo ostane v dvomih, mi to sporočite.

Zdaj pa naredimo svoj skript 😀

Upoštevati moramo korake v tej vadnici: Bash: Kako narediti izvršljiv skript

Potem kopirajmo naslednjo kodo v to datoteko (skripta.sh), in na koncu recimo «izhod»(Brez narekovajev):

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

To bi moralo izgledati tako (ne pozabite, da so morali IP-NASLOV spremeniti v želeni IP):

Tukaj si lahko ogledate izvajani skript:

% CODE1%

Kot vidite, nam na koncu reče «Da, v omrežju je»🙂

Tu je pomembno, da to dejansko razumejo, zato vam puščam še eno kodo, da jo še enkrat razložite, vendar z drugega vidika.

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

Kaj to pomeni, preprosto, obrazložitev puščam po vrsticah:

1. vrstica: Kar napišemo, bo vrednost spremenljivke «besedilo»(Brez narekovajev).

2. vrstica: Preverite, ali je vsebina spremenljivke (kar smo pravkar napisali) 3.

3. vrstica: V primeru biti 3, prikazal nam bo besedilo «Popravljanje»(Brez narekovajev).

4. vrstica: V nasprotnem primeru (torej v primeru, da nismo napisali 3).

5. vrstica: Pokazal nam bo besedilo «Nepravilno»(Brez narekovajev).

6. vrstica: Konec pogoja.

Kot so lahko spoznali, če rečemo echo in nato med dvojnimi narekovaji («) besedilo, zaradi česar bo besedilo prikazano v terminalu. To pomeni, če damo:

echo "esto es una prueba"

Prikazalo nam bo besedilo v terminalu: to je preizkus

Toda ko se vrnem k temu drugemu primeru, vam bom pokazal uporabnost (in izvedbo) tega drugega skripta z ZELO preprostim simple… tipičnim «koliko je 1 + 2?«

Pustil sem vam kodo celotnega skripta:

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

Skript deluje tako:

% CODE2%

In no ... nič več za dodati.

To je nekaj osnovnega, preprostega, da, vendar sem vseeno poskušal to čim bolje razložiti, saj nima vsakdo duše programerja in velikokrat moramo narediti takšne skripte (ali podobne), v vsakem primeru pa upam, da bo ta članek uporaben nekomu 🙂

Če imate kakršen koli dvom ali vprašanje, pritožbo ali predlog, ga pustite tukaj, z veseljem vam bom odgovoril, zato se vsi naučimo še malo

pozdrav


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   jhals je dejal

    Ste profesionalec !!! * ali *

    1.    KZKG ^ Gaara je dejal

      Ne za nič 😀
      Če vam je postreglo in je zanimivo, sem zadovoljen 😉

      Lep pozdrav prijatelj

  2.   pravilno je dejal

    @ KZKG ^ Gaara,
    ko že govorim o bash programiranju, imam vprašanje:
    Kakšna je razlika med razglasitvijo spremenljivke, kot je ta VAR = hello, in deklariranjem take VAR = $ {VAR: -hello}?

    Pojasnim:
    http://pastebin.com/a3cfWXeD

    pozdrav 😉

    1.    KZKG ^ Gaara je dejal

      Pozdravljeni
      No, sploh nisem strokovnjak za bash ... pravzaprav nimam pojma LOL !!
      Ko deklariram spremenljivke, je to tako:
      : ${OPTFOLDER:="/opt/"}

      Ker pa sem to vedno počel tako, ne vem, kakšna razlika bi lahko bila iskreno 🙁

  3.   pravilno je dejal

    @ KZKG ^ Gaara
    No, vprašal sem ga, ker resnica je, da tudi jaz nisem vedel, navadno pišem SlackBuilds in resnica je, da je v teh skriptah veliko spremenljivk, prijavljenih kot v VAR1. Hitro iskanje v Googlu mi je pomagalo razjasniti to vprašanje in ga delim z vsemi, da se lahko vsi naučimo:

    Scenarij:
    http://pastebin.com/faAQb35w

    Pojasnilo:
    Deklariranje spremenljivk v obliki VAR = $ {VAR: -default_value} pomeni, da bo spremenljivka VAR sprejela vrednost default_value, če in samo, če je vrednost nična ali ne obstaja.

    Praktični primer:
    Pri izvajanju skripta se zahteva, da vnesete vrednost, ki se shrani v spremenljivko VAR, če je nekaj vneseno, bo prikazano, kaj je bilo vneseno. Če ničesar ne vnesemo in pritisnemo enter, spremenljivko VAR razglasimo za nično, zato prikazuje vrednost_privzeto.

    Lep pozdrav.

    1.    KZKG ^ Gaara je dejal

      HAHA tega nisem vedel 😀
      Ok, hvala lepa prijateljica ... to sem mislila na koncu članka, ne nameravam česa učiti in to je to, vem, da se bom tu vedno naučila nekaj novega 😀

      Lep pozdrav in še enkrat hvala.

      1.    pravilno je dejal

        imaš prav, tu se človek nauči več stvari.

        lep pozdrav in lepe praznike !! 😀

  4.   Lucas Matija je dejal

    Odlično in odlično razloženo +1, čas, ki vam bo vzel ...
    vendar sem vreden truda 😉

    1.    KZKG ^ Gaara je dejal

      Pravzaprav sem napisal 80% v samo enem dnevu, toliko časa sem ga objavil, ker mi internet ni dovolil.
      Hvala za vaš komentar 😉

  5.   Hugo je dejal

    Drug način za to je uporaba DNS, saj imajo včasih omrežja blokiran protokol ICMP:

    (host -ta IP-ADDRESS> / dev / null 2> & 1) && echo "Povezan z omrežjem"

    Opazili boste tudi, da je v tem primeru preverjanje vrnjene vrednosti implicitno 😉

    1.    KZKG ^ Gaara je dejal

      Ti kot vedno prijatelj, z nasveti, ki jih ne poznam popolnoma HAHAHA.
      Hvala, komentar je hvaležen in hehe ... še ena nova stvar, ki se je naučim 😀

  6.   Datum je dejal

    hvala

    🙂

  7.   Leper_Ivan je dejal

    Čeprav je minilo že nekaj dni od objave te teme, mi je zelo koristilo, zdaj ko sem naredil scenarij v bash .. Hvala Gaara ..

  8.   Edgar navarro je dejal

    Doktor. Hvala za pomoč, ki ste mi jo razjasnili.

    Samo vprašanje, kako naj naredim, da ko en računalnik samodejno preneha pingirati, drugi spremeni IP. Jaz imam to.

    spremeniti IP
    #! / Bin / bash
    ping -c 10 192.168.1.50 # Če ne ping samodejno
    ifconfig eth0 192.168.1.50 mrežna maska ​​255.255.255.0 oddaja 192.168.1.0
    ifconfig eth0 navzdol
    ifconfig eth0 navzgor

  9.   Abraham je dejal

    ker pri primerjavi z vprašanjem, če uporabljate vprašaj? kakšna je razlika med postavitvijo? katero koli drugo pismo

    1.    KZKG ^ Gaara je dejal

      $? pomeni "prejšnji izhod", to je v primeru, da je rezultat prejšnjega ukaza ... 🙂

      1.    Andrew je dejal

        Obstaja še en način, da dosežemo enak rezultat, tako da ukaz ping posredujemo neposredno kot argument, če:

        če ping -c 1 IP-NASLOV; potem
        echo "Ja, je v mreži"
        ostalo
        echo "Ni v omrežju"
        fi

        Kar se zgodi, je, da če ovrednoti vrnjeno vrednost ukaza, ki ga posredujete kot argument, če vrne 0, je res, karkoli drugega je napačno. Oglati oklepaji so enakovredni preskusnemu ukazu. Kateri koli ukaz pa lahko predate kot argument (če ukaz vrne neko vrednost).

  10.   pozdrav je dejal

    Pozdravljeni, kako naj izvedem script.sh z uporabnikom X v skriptu, v katerem ustvarim uporabnika Y, in ta uporabnik Y nadaljuje z izvajanjem script.sh

    Ali je to mogoče storiti ??

  11.   kuktos je dejal

    Zelo zanimivo, hvala!

  12.   Francisco je dejal

    Hvala za prispevek, že eno uro sem ga razumel xD, vendar sem razumel !!!!.

  13.   eloy je dejal

    Scenarij je v redu. Aritmetično bi ga lahko naredili tudi kot ($? == 0), če je enako nič, ni v omrežju, sicer pa v omrežju. In če še vedno želimo narediti malo bolj interaktivno, lahko rečemo:
    echo -n Vnesite IP:
    preberite ip
    ping -c 1 $ ip

  14.   Dario je dejal

    Pozdravljeni, pri tem sem zelo nov, poskušam narediti številko vozovnice (alfanumerično) skozi branje in želim, da če ima vneseni pravilni format (ABC-123456) izvršite ukaz "x" in ne vem. ne vem, kako to storiti, mi lahko pomagaš?

    echo "Vnesite vozovnico"
    branje -p vstopnice

    če $ vozovnica = "brez ideje (format ABC-123456"); nato cp file.txt $ vozovnica; else echo "Napačna oblika, poskusi znova"; branje -p; fi.

    Seveda je grozno in smejijo se haha, ampak kot rečeno, šele začenjam s tem.

    Če slabo razložim, mi prosim povejte in poskusim narediti bolje.

    Objemite vse.

  15.   Umberto Y je dejal

    Odlična razlaga, lep pozdrav

  16.   okretna je dejal

    Malo dvomim o if, else in drugih.
    Želim, da skript preveri, ali datoteka obstaja (eden od dnevnikov), in če ne, da jo ustvari in kasneje piše vanjo. Če pa obstaja, želim, da ji samo pišeš.

    kar imam je:

    datum = `datum -R`
    #Preizkušal sem spremenljivi datum, ki ni posodobljen med začetkom a
    #proces in se konča, včasih lahko mine ena ura in ne pride pravi čas.

    če [-f /home/user/logs/test.log];
    POTEM
    dotaknite se /home/usuario/logs/test.log
    ostalo
    echo "$ datum: posodobljeno" >> /home/user/logs/test.log
    odmev «————————————————» >> /home/user/logs/test.log
    fi

    Teoretično bi moralo biti v redu, v resnici pa se ne posodobi, če navedena datoteka že obstaja

    1.    okretna je dejal

      oprosti, videl sem, da ni bilo poslano in se je podvojilo