Bash: Ehdot (jos-sitten-muu)

Hei

Tällä kertaa näytän sinulle, kuinka tehdä käsikirjoitus ehdolla Kemut, joka on käännetty:

Jos haluamasi X asia on toteutettu, Y-toiminto suoritetaan, jos sitä ei suoriteta, tehdään toinen toiminto.

Yksinkertainen selitys ei 😀

Olen nyt miettinyt muutaman minuutin ajan joitain esimerkkejä, joita voidaan käyttää tässä opetusohjelmassa, minulle syntyi seuraava ongelma / ongelma / tilanne:

Olemme yrityksemme verkossa ja haluamme tietää, onko X-tietokone kytketty verkkoon. Tätä varten teemme a käsikirjoitus mitä hän tekee ping kohti kyseistä tietokonetta ja jos se on verkossa (ts. jos se palauttaa ping) kertoo meille, että KYLLÄ, se on verkossa, muuten (ts. se ei ole verkossa) se kertoo meille, että se EI ole verkossa.

Kun tämä on tehty, selitän nyt kuinka pyöräillä olosuhteilla 🙂

Tässä on koodi:

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

Älä huoli, selitän tämän sinulle yksityiskohtaisesti 😉

ping on komento, jota käytämme, ja se kertoo meille, onko kyseinen tietokone verkossa. Meidän on muutettava, jotta voimme kertoa, minkä tietokoneen haluamme tarkistaa, onko se verkossa IP-OSOITE tietysti sen tietokoneen IP-osoite, jonka haluamme tarkistaa.

Kuten näette, laitoin «-c 1«, Mikä on meille välttämätöntä. Kun pingataan tietokonetta, tämä toiminto ei pysähdy (ping) ennen kuin painamme itseämme [Ctrl] + [C], joten laittaa «-c 1»Käskemme sinua tekemään vain yksi vahvistus (vain yksi ping-yritys) eikä mitään muuta, se saa sen pysähtymään välittömästi, eli… se tarkistaa, onko tietokone verkossa vain kerran.

Jos epäilet tätä, ei kipua ... he sanovat niin ja selitän mielelläni heille uudelleen 😉

Nyt tulee sykli, koska mitä juuri selitin, ei ole muuta kuin normaali komento / toiminto 😀

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

Jotta ymmärrät tämän, selitän erittäin tärkeän yksityiskohdan Bashista 🙂

Aiheeseen perehtynein voisi merkitä minut vääräksi tai vastaavaksi, mutta hei, kirjoitan tämän aloittelijoille tai vähemmän asiantuntijoille, kunhan he ymmärtävät sen niin hienoa 😉

Se tapahtuu niin kuin Kemut se on jotain 0 y 1, eli olet joko elossa tai kuollut, kun komento tai toiminto suoritetaan: Joko toteutettu hyvin Ei ongelmaa (1), Tai siellä oli joitain ongelma tai virhe (0).

Suoritamme X-toiminnon tai -komennon, ja mitä teimme, on ehkä suoritettu hyvin tai huonosti, siinä voi olla virhe tai ei, ja tässä yksityiskohdat ovat 😉

Jos lähetämme tehtävän (tässä tapauksessa: ping -c 1 IP-OSOITE) ei antanut virhettä ja onnistui, joten se palauttaa arvon: 1 . Muuten, ja jos toiminto (ts. Ping) ei onnistunut, se palauttaa arvon 0.

 Ja lopuksi, mitä yllä oleva koodi tarkoittaa, on tämä:

Jos arvo 0 palautettiin sitten

Näytä teksti: «Ei verkossa»

Muussa tapauksessa (ja palauta EI 0, mutta 1)

Näytä teksti: «Jos se on verkossa«

Tämä, jonka olen juuri selittänyt sinulle, palvelee meitä tulevaisuudessa monissa asioissa, koska on todella hyödyllistä sanoa, että jos X-toiminto antoi virheen, tee Y-toiminto ja jos X-toiminta ei ole antanut virhe, tee sitten Z-toiminto.

Tiedän, että jotkut saattavat hieman hämmentyä, joten olen yrittänyt selittää sen useilla eri tavoilla yrittäen saada kaikki ymmärtämään sen tavalla tai toisella. Jos joku jää epäilyyn, ilmoita siitä minulle.

Tehdään nyt käsikirjoituksemme 😀

Meidän on noudatettava tämän opetusohjelman vaiheita: Bash: Kuinka tehdä suoritettava komentosarja

Kopioidaan sitten seuraava koodi tiedostoon (script.sh), ja sanotaan lopuksi «poistua»(Ilman lainausmerkkejä):

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

Sen pitäisi näyttää tältä (muista, että heidän on vaihdettava IP-ADDRESS haluamaasi IP-osoitteeseen):

Täältä näet käynnissä olevan komentosarjan:

% CODE1%

Kuten näette, hän lopulta kertoo meille «Kyllä, se on verkossa»🙂

Tärkeää tässä on, että he todella ymmärtävät tämän olosuhteista, joten jätän sinulle toisen koodin selittämään sitä uudestaan, mutta toisesta näkökulmasta.

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

Tämä tarkoittaa yksinkertaista, jätän selityksen rivi riviltä:

1. rivi: Mitä kirjoitamme, se on muuttujan arvo «teksti»(Ilman lainausmerkkejä).

2. rivi: Tarkista, onko muuttujan sisältö (mitä juuri kirjoitimme) 3.

3. rivi: Jos on 3, se näyttää meille tekstin «Oikea»(Ilman lainausmerkkejä).

4. rivi: Muuten (ts. Jos emme ole kirjoittaneet 3).

5. rivi: Se näyttää meille tekstin «väärä»(Ilman lainausmerkkejä).

6. rivi: Tilan loppu.

Kuten he ovat voineet ymmärtää, jos sanomme kaiku ja sitten lainausmerkkien väliin («) teksti, tämä tuo teksti näkyviin päätelaitteeseen. Eli jos laitamme:

echo "esto es una prueba"

Se näyttää meille terminaalissa olevan tekstin: Tämä on testi

Mutta palatakseni tähän toiseen esimerkkiin, näytän teille tämän toisen komentosarjan hyödyllisyyden (ja toteutuksen) jollain Hyvin yksinkertaisella 😀… tyypilliselläkuinka paljon on 1 + 2?«

Jätän koko komentosarjan koodin:

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

Näin komentosarja toimii:

% CODE2%

Ja no ... ei mitään muuta lisättävää.

Tämä on jotain yksinkertaista, yksinkertaista kyllä, mutta silti olen yrittänyt selittää sen mahdollisimman hyvin, koska kaikilla ei ole ohjelmoijan sielua, ja monta kertaa meidän on tehtävä tällaisia ​​(tai vastaavia) komentosarjoja, joka tapauksessa minä toivottavasti tämä artikkeli on hyödyllinen sinulle jollekulle 🙂

Jos sinulla on epäilyksiä, kysymyksiä, valituksia tai ehdotuksia, jätä ne tänne, minä vastaan ​​mielelläni sinulle, joten me kaikki opimme hieman enemmän 😀

terveiset


26 kommenttia, jätä omasi

Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   jhals dijo

    Olet ammattilainen !!! *tai*

    1.    KZKG ^ Gaara dijo

      Ei mitään 😀
      Jos se palveli sinua ja on mielenkiintoista, olen tyytyväinen 😉

      Terveisiä ystävä

  2.   asianmukainen dijo

    @ KZKG ^ Gaara,
    puhuen bash-ohjelmoinnista, minulla on kysymys:
    Mitä eroa on tällaisen muuttujan julistamisella VAR = hei ja ilmoituksella näin VAR = $ {VAR: -hello}?

    Minä selitän:
    http://pastebin.com/a3cfWXeD

    tervehdys 😉

    1.    KZKG ^ Gaara dijo

      Hei
      No, en ole lainkaan bashin asiantuntija ... itse asiassa minulla ei ole aavistustakaan LOL: sta!
      Kun ilmoitan muuttujat, se on seuraava:
      : ${OPTFOLDER:="/opt/"}

      Mutta koska tein sen aina näin, en tiedä mikä ero voi olla rehellisesti 🙁

  3.   asianmukainen dijo

    @ KZKG ^ Gaara
    Esitin kysymyksen, koska totuus on se, että en tiennyt kumpikaan, kirjoitan yleensä SlackBuildsia ja totuus on, että VAR1: ssä ilmoitetut muuttujat ovat runsaasti näissä komentosarjoissa. Nopea google-haku auttoi minua selvittämään tämän kysymyksen, jaan sen kaikille, jotta voimme kaikki oppia:

    käsikirjoitus:
    http://pastebin.com/faAQb35w

    Selitys:
    Lomakkeen VAR = $ {VAR: -default_value} muuttujien ilmoittaminen tarkoittaa, että muuttuja VAR ottaa arvon default_value vain, jos arvo on nolla tai sitä ei ole.

    Käytännön esimerkki:
    Komentosarjaa suoritettaessa pyydetään syöttämään arvo, joka tallennetaan VAR-muuttujaan, jos jotain syötetään, se näyttää syötetyn. Jos emme kirjoita mitään ja painamme Enter, ilmoitamme muuttujan VAR nollaksi, joten se näyttää arvon_oletus.

    Tervehdys.

    1.    KZKG ^ Gaara dijo

      HAHA En tiennyt sitä 😀
      Okei, kiitos paljon ystäväni ... tarkoitin sitä artikkelin lopussa, en aio opettaa jotain ja siinä kaikki, tiedän, että opin aina jotain uutta täällä

      Terveisiä ja kiitoksia vielä kerran.

      1.    asianmukainen dijo

        olet oikeassa, täällä opitaan useita asioita.

        terveisiä ja hyvää joulua !! 😀

  4.   Lucas Matthias dijo

    Erittäin hyvä ja erinomaisesti selitetty +1, aika, jonka se vie ...
    mutta olen vaivan arvoinen 😉

    1.    KZKG ^ Gaara dijo

      Oikeastaan ​​kirjoitin 80% vain yhdessä päivässä, se kesti niin kauan julkaista sen vain, koska Internet ei antanut minulle.
      Kiitos kommentistasi 😉

  5.   Hugo dijo

    Toinen tapa tehdä se on käyttää DNS: ää, koska joskus verkoissa ICMP-protokolla on estetty:

    (isäntä -ta IP-OSOITE> / dev / null 2> & 1) && kaiku "Yhdistetty verkkoon"

    Huomaa myös, että tässä esimerkissä palautusarvon tarkistus on implisiittinen 😉

    1.    KZKG ^ Gaara dijo

      Sinä kuten aina ystäväsi, vinkkejä, joita en tunne täysin HAHAHA.
      Kiitos, kommentti on arvostettu ja hehe ... toinen uusi asia, jonka opin 😀

  6.   Päivämäärä dijo

    kiitos

    🙂

  7.   Leper_Ivan dijo

    Vaikka tämän aiheen julkaisemisesta on kulunut useita päiviä, se on palvellut minua paljon, nyt kun tein käsikirjoituksen bashissa .. Kiitos Gaara ..

  8.   Edgar navarro dijo

    Laki kiitos avusta, jonka teit asioista selväksi minulle.

    Vain kysely, miten teen niin, että kun toinen tietokone lopettaa pingaamisen automaattisesti, toinen muuttaa IP-osoitetta. Minulla on tämä.

    muuttaa IP-osoitetta
    #! / Bin / bash
    ping -c 10 192.168.1.50 # Jos se ei pingaa automaattisesti
    ifconfig eth0 192.168.1.50 netmaski 255.255.255.0 lähetys 192.168.1.0
    ifconfig eth0 alas
    ifconfig eth0 ylös

  9.   Abraham dijo

    koska verrattaessa kysymykseen, jos käytät kysymysmerkkiä? mitä eroa on? muut kirjeet

    1.    KZKG ^ Gaara dijo

      $? tarkoittaa 'edellistä lähtöä', toisin sanoen jos edellisen komennon tulos ... 🙂

      1.    Andrew dijo

        On toinen tapa saavuttaa sama tulos, välittämällä ping-komento suoraan argumenttina, jos:

        jos ping -c 1 IP-OSOITE; sitten
        kaiku "Kyllä se on verkossa"
        muu
        kaiku "Ei verkossa"
        fi

        Tapaus on, että jos se arvioi argumenttina antamasi komennon palautusarvon, jos se palauttaa arvon 0, se on tosi, kaikki muu on väärä. Hakasulkeet vastaavat testikomentoa. Mutta voit välittää minkä tahansa komennon argumenttina (kunhan komento palauttaa jonkin arvon).

  10.   terveiset dijo

    Hei, kuinka suoritan script.sh käyttäjän X kanssa komentosarjassa, luon käyttäjän Y, ja että käyttäjä Y jatkaa script.sh: n suorittamista

    Voidaanko tämä tehdä ??

  11.   kuktos dijo

    Erittäin mielenkiintoinen, kiitos!

  12.   Francisco dijo

    Kiitos panoksesta, olen ollut tunnin ymmärtämään sitä xD, mutta ymmärsin sen !!!!.

  13.   Eloy dijo

    Käsikirjoitus on hieno. Aritmeettisesti se voidaan tehdä myös muodossa ($? == 0), jos se on yhtä suuri kuin nolla, sitä ei ole verkossa, muuten se on verkossa. Ja jos haluamme silti tehdä siitä hieman interaktiivisemman, voimme sanoa:
    echo -n Anna IP:
    lue ip
    ping -c 1 $ ip

  14.   Dario dijo

    Hei, olen tässä aivan uusi, yritän tehdä lippunumeron (aakkosnumeerisen) lukemisen kautta ja haluan, että jos syötetyllä on oikea muoto (ABC-123456), suorita "x" -komento ja en en tiedä miten se tehdään, voisitko auttaa minua?

    kaiku "Syötä lippu"
    Lue -p lippu

    jos $ lippu = "ei ideaa (muoto ABC-123456"); sitten cp file.txt $ -lippu; muuten kaiku "väärä muoto, yritä uudelleen"; lukea -p; fi.

    Toki se on kamalaa ja he nauravat haha, mutta kuten sanoin, olen vasta aloittamassa tästä.

    Jos selitän huonosti, kerro minulle ja yritän tehdä paremmin.

    Halata kaikkia.

  15.   Umberto Y dijo

    Erinomainen selitys, terveisiä

  16.   Agil dijo

    Vähän epäilen jos, muuta ja muita.
    Haluan komentosarjan, joka tarkistaa, että tiedosto on olemassa (jokin lokeista), ja jos ei, luo se ja kirjoittaa siihen myöhemmin. Mutta jos se on olemassa, haluan sinun vain kirjoittavan sille.

    Mitä minulla on:

    päivämäärä = "päivämäärä -R".
    #Testasin muuttuvaa päivämäärää, jota ei päivitetä a alun välillä
    #prosessi ja loppuu, joskus voi mennä tuntikin eikä oikea aika tule ulos.

    jos [-f /home/user/logs/test.log];
    sitten
    kosketa /home/usuario/logs/test.log
    muu
    echo "$ päivämäärä: Päivitetty" >> /home/user/logs/test.log
    echo «———————————————-» >> /home/user/logs/test.log
    fi

    Teoriassa sen pitäisi olla kunnossa, mutta tosiasia on, että sitä ei päivitetä, jos viitattu tiedosto on jo olemassa

    1.    Agil dijo

      Anteeksi, huomasin, että sitä ei lähetetty ja se on kaksinkertaistunut