Bash: nosacījumi (ja-tad-vēl)

sveiki

Šoreiz es jums parādīšu, kā izveidot skriptu ar nosacījumu Stipri iesist, kas tulkots ir:

Ja tiek izdarīta vēlamā X lieta, tiek veikta Y darbība, ja tā nav izdarīta, tiek veikta cita darbība.

Vienkāršs skaidrojums nē 😀

Tagad dažas minūtes domāju par piemēru, ko izmantot šajā apmācībā, man radās šāda dilemma / problēma / situācija:

Mēs atrodamies mūsu uzņēmuma tīklā, un mēs vēlamies uzzināt, vai X dators ir pievienots tīklam. Šim nolūkam mēs izgatavojam a scenārijs ko viņš darīs ping uz šo datoru un, ja tas atrodas tīklā (tas ir, ja tas atgriež ping) mums pateiks, ka JĀ, tas ir tīklā, pretējā gadījumā (tas ir, tas nav tīklā), viņš mums pateiks, ka tas NAV tīklā.

Kad tas ir izdarīts, tagad es paskaidrošu, kā braukt ar apstākļiem 🙂

Šeit ir kods:

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

Neuztraucieties, es jums to sīkāk paskaidrošu 😉

ping ir komanda, kuru mēs izmantosim, un tā mums pateiks, vai šis dators ir tīklā. Lai pateiktu, kuru datoru mēs vēlamies pārbaudīt, vai tas ir tīklā, mums ir jāmainās IP ADRESE acīmredzot ar tā datora IP adresi, kuru mēs vēlamies pārbaudīt.

Kā redzat, es ieliku «-c 1«, Kas mums vajadzīgs. Kad mēs pingam datoru, šī darbība neapstājas (ping), kamēr mēs nenospiežam sevi [Ctrl] + [C], tāpēc liekot «-c 1»Mēs jums iesakām veikt tikai vienu verifikāciju (tikai vienu ping mēģinājumu) un nevienu citu, tas to nekavējoties apturēs, tas ir ... tas pārbaudīs, vai dators ir tīklā tikai vienu reizi.

Ja jums ir šaubas par to, nav sāpju ... viņi to saka, un es ar prieku jums to vēlreiz izskaidrošu 😉

Tagad nāk cikls, jo tas, ko es tikko paskaidroju, nav nekas cits kā parasta komanda / darbība 😀

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

Lai jūs to saprastu, es paskaidrošu ārkārtīgi svarīgu Bash detaļu 🙂

Zinošākais no tēmas varētu mani apzīmēt kā nepareizu vai kaut ko tamlīdzīgu, bet, hei, es to rakstu iesācējiem vai mazāk ekspertiem, ja vien viņi to saprot, tad lieliski 😉

Gadās, ka tāpat kā Stipri iesist tas ir kaut kas līdzīgs 0 y 1, tas ir, vai nu jūs esat dzīvs, vai arī esat miris, kad tiek izpildīta komanda vai darbība: vai nu izpildīts labi Nekādu problēmu (1), bija daži problēma vai kļūda (0).

Mēs veicam X darbību vai komandu, un tas, ko mēs darījām, iespējams, tika izpildīts labi vai slikti, iespējams, tajā bija kļūda vai nē, un šeit ir detalizēta informācija 😉

Ja tas, ko mēs sūtām darīt (šajā gadījumā: ping -c 1 IP ADRESE) nedeva kļūdu un bija veiksmīga, tāpēc tā atgriezīs vērtību: 1 . Pretējā gadījumā, ja darbība (tas ir, ping) nebija veiksmīga, tā atgriezīs vērtību 0.

 Visbeidzot, iepriekšminētais kods nozīmē:

Ja vērtība 0 tika atgriezta

Parādīt tekstu: «Nav tīklā»

Pretējā gadījumā (un atgrieziet NĒ 0, bet 1)

Parādīt tekstu: «Ja tas ir tīklā«

Tas, ko es jums tikko paskaidroju, nākotnē mums noderēs daudzās lietās, jo ir patiešām lietderīgi teikt, ka, ja X darbība deva kļūdu, veiciet Y darbību un, ja X darbība nav devusi kļūdu, pēc tam veiciet Z darbību.

Es zinu, ka daži varētu mazliet apjukt, tāpēc esmu mēģinājis to izskaidrot vairākos dažādos veidos, cenšoties likt visiem to saprast tā vai citādi. Gadījumā, ja kādam rodas šaubas, paziņojiet man.

Tagad izveidosim savu skriptu 😀

Mums ir jāveic šīs apmācības darbības: Bash: Kā izveidot izpildāmo skriptu

Tad nokopēsim šo failu šajā failā (skripts.sh), un beigās teiksim «izeja»(Bez pēdiņām):

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

Tam vajadzētu izskatīties šādi (atcerieties, ka jums ir jāmaina IP adrese uz vēlamo IP):

Šeit jūs varat redzēt skriptu:

% CODE1%

Kā redzat, beigās viņš mums saka «Jā, tas ir tīklā»🙂

Svarīgi šeit ir tas, ka viņi to faktiski saprot par apstākļiem, tāpēc es jums atstāju citu kodu, lai to vēlreiz izskaidrotu, bet no cita viedokļa.

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

Tas, ko tas nozīmē, ir vienkāršs, atstāju skaidrojumu pa rindai:

1. rinda: Tas, ko mēs rakstām, būs mainīgā vērtība «teksts»(Bez pēdiņām).

2. līnija: Pārbaudiet, vai mainīgā saturs (tas, ko mēs tikko rakstījām) ir 3.

3. rinda: Būtības gadījumā 3, tas mums parādīs tekstu «Izlabojiet»(Bez pēdiņām).

4. līnija: Pretējā gadījumā (tas ir, ja mēs neesam uzrakstījuši 3).

5. līnija: Tas mums parādīs tekstu «Nepareizi»(Bez pēdiņām).

6. līnija: Nosacījuma beigas.

Kā viņi ir spējuši saprast, ja mēs sakām palaist garām un pēc tam starp divkāršām pēdiņām («) tekstu, tas izraisīs šī teksta parādīšanu terminālā. Tas ir, ja mēs sakām:

echo "esto es una prueba"

Tas mums parādīs tekstu terminālā: Šis ir tests

Bet, atgriežoties pie šī otrā piemēra, es jums parādīšu šī otrā skripta lietderību (un izpildi) ar kaut ko ĻOTI vienkāršu 😀 ... tipisko «cik maksā 1 + 2?«

Es jums atstāju visa skripta kodu:

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

Skripts darbojas šādi:

% CODE2%

Un labi ... nekas vairāk jāpiebilst.

Tas ir kaut kas elementārs, vienkāršs jā, bet tomēr es esmu mēģinājis to izskaidrot pēc iespējas labāk, jo ne visiem ir programmētāja dvēsele, un daudzas reizes mums ir jāizveido šādi skripti (vai līdzīgi), jebkurā gadījumā es ceru, ka šis raksts jums būs noderīgs kāds 🙂

Lūdzu, atstājiet šaubas vai jautājumus, sūdzības vai ierosinājumus, atstājiet to šeit, es ar prieku jums atbildēšu, un tāpēc mēs visi uzzinām nedaudz vairāk 😀

Sveicieni


Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   Džāls teica

    Jūs esat profesionālis !!! * vai *

    1.    KZKG ^ Gaara teica

      Nē par neko 😀
      Ja tas jums kalpoja un ir interesanti, esmu apmierināta 😉

      Sveiciens draugs

  2.   pienācīgs teica

    @ KZKG ^ Gaara,
    runājot par bash programmēšanu, man ir jautājums:
    Kāda ir atšķirība starp tāda mainīgā deklarēšanu kā VAR = labdien un tā deklarēšanu kā VAR = $ {VAR:-labdien?

    Es paskaidroju:
    http://pastebin.com/a3cfWXeD

    sveicieni 😉

    1.    KZKG ^ Gaara teica

      sveiki
      Nu, es vispār neesmu eksperts bashā ... patiesībā man nav ne mazākās nojausmas par LOL !!
      Kā paziņoju mainīgos, tas ir šāds:
      : ${OPTFOLDER:="/opt/"}

      Bet, tā kā es vienmēr to darīju šādi, es nezinu, kāda atšķirība varētu būt godīgi 🙁

  3.   pienācīgs teica

    @ KZKG ^ Gaara
    Nu, es uzdevu jautājumu, jo arī es nezināju, es parasti rakstu SlackBuilds un patiesība ir tāda, ka šajos skriptos ir daudz mainīgo, kas deklarēti kā VAR1. Ātra google meklēšana man palīdzēja noskaidrot šo jautājumu, es to kopīgoju ar visiem, lai mēs visi varētu mācīties:

    Skripts:
    http://pastebin.com/faAQb35w

    Paskaidrojums:
    VAR = $ {VAR: -default_value} mainīgo lielumu deklarēšana nozīmē, ka mainīgais VAR uzņems vērtību default_value tikai tad, ja vērtība ir nulle vai tās nav.

    Praktisks piemērs:
    Izpildot skriptu, tiek lūgts ievadīt VAR mainīgajā saglabājamo vērtību, ja kaut kas tiek ievadīts, tas parādīs ievadīto. Ja mēs neko neievadām un nospiežam Enter, mēs mainām VAR kā nulli, tāpēc tas parāda default_value.

    Sveicieni.

    1.    KZKG ^ Gaara teica

      HAHA es to nezināju 😀
      Labi, liels paldies draugam ... to es domāju ar raksta beigām, es nedomāju kaut ko mācīt un viss, es zinu, ka vienmēr šeit uzzināšu kaut ko jaunu

      Vēlreiz sveicieni un paldies.

      1.    pienācīgs teica

        tev taisnība, viens šeit iemācās vairākas lietas.

        sveicieni un jaukas brīvdienas !! 😀

  4.   Lūkass Matiass teica

    Lielisks un lieliski izskaidrots +1, laiks, kas jums būs vajadzīgs ...
    bet es esmu pūļu vērts 😉

    1.    KZKG ^ Gaara teica

      Patiesībā es uzrakstīju 80% tikai vienas dienas laikā, man bija vajadzīgs tik ilgs laiks, lai to publicētu tikai tāpēc, ka mans internets man to neļāva.
      Paldies par komentāru 😉

  5.   Hugo teica

    Vēl viens veids, kā to izdarīt, ir DNS izmantošana, jo dažreiz tīklos ir bloķēts ICMP protokols:

    (resursdators -ta IP-ADDRESS> / dev / null 2> & 1) && atbalss "Savienots ar tīklu"

    Jūs ievērosiet arī to, ka šajā piemērā atgriešanās vērtības pārbaude ir netieša 😉

    1.    KZKG ^ Gaara teica

      Tu kā vienmēr draugs, ar padomiem, kurus es pilnībā nepazīstu HAHAHA.
      Paldies, komentārs tiek novērtēts un hehe ... vēl viena jauna lieta, ko es iemācos 😀

  6.   Datums teica

    Gracias

    ????

  7.   Leper_Ivan teica

    Kaut arī kopš šīs tēmas publicēšanas ir pagājušas vairākas dienas, tā man ir daudz noderējusi, tagad, kad es izveidoju skriptu bash .. Paldies Gaara ..

  8.   Edgars navarro teica

    Dok. Paldies par palīdzību, ko man padarījāt skaidru.

    Vienkārši vaicājums, kā man rīkoties tā, lai tad, kad viens dators automātiski pārtrauks pingēšanu, cits mainītu IP. Man tas ir.

    lai mainītu IP
    #! / bin / bash
    ping -c 10 192.168.1.50 # Ja tas nedarbojas automātiski
    ifconfig eth0 192.168.1.50 netmask 255.255.255.0 apraide 192.168.1.0
    ifconfig eth0 uz leju
    ifconfig eth0 augšup

  9.   Ābrahāms teica

    jo, ja salīdzināt ar jautājumu, ja izmantojat jautājuma zīmi? kāda ir atšķirība starp? jebkura cita vēstule

    1.    KZKG ^ Gaara teica

      $? ir “iepriekšējā izeja vai izeja”, tas ir, ja iepriekšējās komandas rezultāts ... 🙂

      1.    Andrew teica

        Ir vēl viens veids, kā sasniegt to pašu rezultātu, ping komandu tieši nododot kā argumentu, ja:

        ja ping -c 1 IP-ADDRESS; pēc tam
        atbalss "Jā, tas ir tīklā"
        cits
        atbalss "Nav tīklā"
        fi

        Kas notiek, ir tas, ka, ja tiek novērtēta komandas argumenta atgriešanas vērtība, ja tā atgriež 0, tā ir taisnība, kaut kas cits ir nepareizs. Kvadrātiekavas ir līdzvērtīgas testa komandai. Bet jūs varat nodot jebkuru komandu kā argumentu (ja vien komanda atgriež kādu vērtību).

  10.   Sveicieni teica

    Labdien, kā es varu izpildīt skriptu.sh ar lietotāju X skriptā, kurā izveidoju lietotāju Y, un šis lietotājs Y turpina izpildīt skriptu.sh

    Vai to var izdarīt ??

  11.   kuktos teica

    Ļoti interesanti, paldies!

  12.   Francisco teica

    Paldies par ieguldījumu, man ir bijusi stunda, lai to saprastu xD, bet es to sapratu !!!!.

  13.   Eloy teica

    Skripts ir kārtībā. Aritmētiski to var izdarīt arī kā ($? == 0), ja tas ir vienāds ar nulli, tas nav tīklā, pretējā gadījumā tas ir tīklā. Un, ja mēs joprojām vēlamies to padarīt nedaudz interaktīvāku, mēs varam teikt:
    echo -n Ievadiet IP:
    lasīt ip
    ping -c 1 $ ip

  14.   Dario teica

    Sveiki, man tas ir ļoti jauns, es mēģinu izveidot biļetes numuru (burtciparu), lasot, un es vēlos, lai, ja ievadītajam ir pareizs formāts (ABC-123456), izpildiet komandu "x", un es to nedaru es nezinu, kā to izdarīt, vai jūs varētu man palīdzēt?

    atbalss "Ievadiet biļeti"
    lasīt -p biļete

    ja $ biļete = "nav ne jausmas (formāts ABC-123456"); tad cp file.txt $ biļete; cits atbalss "nepareizs formāts, mēģiniet vēlreiz"; lasīt -p; fi.

    Protams, tas ir briesmīgi, un viņi smejas haha, bet, piemēram, es teicu, ka es tikai sāku ar šo.

    Ja es paskaidroju slikti, lūdzu, pasakiet man, un es cenšos darīt labāk.

    Apskauj visus.

  15.   Umberto Y teica

    Lielisks skaidrojums, sveicieni

  16.   veikls teica

    Man ir nelielas šaubas par if, else un citiem.
    Es vēlos, lai skripts pārbaudītu, vai fails eksistē (viens no žurnāliem), un, ja nē, izveidot to un vēlāk tajā ierakstīt. Bet, ja tas pastāv, es vēlos, lai jūs tam vienkārši uzrakstītu.

    Tas, kas man ir, ir:

    datums = `datums -R`
    #Es testēju mainīgo datumu, kas netiek atjaunināts laikā no a sākuma
    #process un beidzas, dažreiz var paiet stunda un īstais laiks neiznāk.

    ja [-f /home/user/logs/test.log];
    tAD
    pieskarieties /home/usuario/logs/test.log
    cits
    echo "$ datums: atjaunināts" >> /home/user/logs/test.log
    echo «———————————————-» >> /home/user/logs/test.log
    fi

    Teorētiski tam vajadzētu būt labi, taču patiesībā tas netiek atjaunināts, ja atsauces fails jau pastāv

    1.    veikls teica

      atvainojos, redzēju, ka nav nosūtīts un ir dubultojies