Programmeren in bash - deel 2

Deel twee van dit mini-zelfstudie programmeren in Slaan, waar we leren gebruiken cycli en andere tools die ons zullen helpen de functionaliteiten van onze scripts.

De If voorwaardelijk

De functie van If is om een ​​filter toe te passen en een bewerking of taak uit te voeren voor elk type filter dat wordt toegepast. De structuur is als volgt:

Als [voorwaarde]; dan elif commando's [voorwaarde]; dan beveelt anders; fi-opdrachten

Een voorbeeld wordt getoond naast de For-lus in de respectievelijke sectie.

cycli

1. While: het zal alle opdrachten uitvoeren die zijn opgegeven tussen do en done, zolang de voorwaarde waar is. Als we er vergelijkingsoperatoren aan willen doorgeven, moet de uitdrukking tussen haakjes staan.

terwijl CONDITION / COMMAND commando's doet

Voorbeeld: tafel van vermenigvuldiging van een getal

#! / bin / bash X = 1 echo "Voer een getal in en druk op ENTER" lees M #De lus bepaalt of X kleiner is dan of gelijk is aan 10 terwijl [$ X –le 10] doet #In R slaan we de vermenigvuldiging van X op met MR = $ [X * M] #Deze vermenigvuldiging wordt afgedrukt op het scherm echo "$ M * $ X = $ R" #Met let, verhogen we de waarde van X met 1 eenheid laat X = $ X + 1 gedaan

2. For: slaat een lijst met elementen op in een variabele, die zal worden gebruikt om bepaalde bewerkingen met elke cyclus uit te voeren.

voor VARIABLE in ELEMENTS doe je commando's

Voorbeeld: programma dat een bestand van de ene map naar de andere kopieert en een oud bestand vervangt.

# / bin / bash #We stellen bron- en bestemmingsmappen op ORIGIN = / home / user / Downloads DESTINATION = / home / user / Documents # We plaatsen onszelf in de bron-cd $ ORIGIN # Van alle bestanden willen we alleen degene die # is roep FILE aan voor FILE in * do ARCH-DESTINATION = "$ DESTINATION / $ FILE" # -f filtert ons reguliere bestanden, aangezien mappen #niets goeds voor ons zijn. –Niet filtert # bestanden die "nieuwer" zijn dan die # gevonden in de doelmap als [-f $ FILE] && [$ FILE –nt $ ARCH-DESTINATION]; echo dan "Copying $ FILE ..." # we kopiëren het bestand met cp cp $ FILE $ ARCH-DESTINATION fi klaar #We cd om de bronmap cd te verlaten

Een ander voorbeeld: script waarbij de gebruiker een willekeurig getal moet raden dat door de computer is gegenereerd.

# / bin / bash # Een willekeurig nummer wordt gegenereerd van 1 tot 10, het wordt # opgeslagen in RANDOM RANDOM = $ [$ RANDOM% 10 + 1] terwijl [1] echo doet –n "Voer een nummer in:" lees NUM # Vergelijk of het door de gebruiker gekozen aantal gelijk is aan RANDOM; vergeet niet om $ te gebruiken om de #waarden van de variabelen te evalueren en niet hun namen als ["$ NUM –eq" $ RANDOM "]; echo dan "Je hebt het goed!" #break maakt het mogelijk om de lus te beëindigen terwijl pauze #Als het nummer kleiner is dan RANDOM elif ["$ NUM –gt" $ RANDOM "]; dan echo "Het is minder" "Zo niet, het is groter dan RANDOM anders echo" HET IS groter "fi gedaan

3. Tot: qua structuur vergelijkbaar met While, behalve dat de code altijd wordt uitgevoerd terwijl de evaluatie van de conditie negatief is, dat wil zeggen, het programma blijft uitvoeren "totdat de conditie zich voordoet"

totdat CONDITION / COMMAND commando's gedaan hebben

Voorbeeld: druk de nummers 10-20 af in aflopende volgorde

#! / bin / bash CONT = 20 #Zolang de teller kleiner is dan 10 (-lt, "lower #than") wordt de code uitgevoerd tot [$ CONT -lt 10]; do echo "COUNTER $ CONT" #A CONT wordt afgetrokken door een eenheid laat CONT- = 1 gedaan

4. Selecteer: deze laatste cyclus is een speciaal geval, aangezien deze doorgaans wordt gebruikt om snel menu's te maken. Het werkt vergelijkbaar met de For-lus.

selecteer VARIABEL in LIJST met uitgevoerde opdrachten

Voorbeeld: geef de gebruiker de mogelijkheid om door te gaan of het script te beëindigen.

#! / bin / bash #item is een variabele die reageert op wat de #gebruiker kiest, Doorgaan en Voltooien zijn de #opties die voor hem beschikbaar zijn, hoewel andere opties kunnen worden toegevoegd # meer selecteer item in Doorgaan Voltooien doe #Als de gebruiker kiest beëindig het programma, dan verlaten we met pauze de cyclus. if [$ item = "Finish"]; dan breken fi gedaan
Bedankt Juan Carlos Ortiz!

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   Gemiddeld moeilijk zei

    Ik denk zoiets als dit: tar -cf - Directory | (cd / andere / directory; tar -xvf -)

    Dan zou het eruit zien als / another / directory / Directory
    Op die manier heb ik een directory gecomprimeerd en jij decomprimeert het op een andere plaats….

  2.   Miguel Angel zei

    Hallo, goede docent, ik leer over het onderwerp en alles is in orde, alleen heb ik geen programma kunnen maken dat me helpt, kijk of je me alsjeblieft kunt helpen.

    Ik moet een cyclus doen, waarin het als parameters een lijst van een bronbestand zal ontvangen, deze lijst geeft alleen namen (zonder extensie), zodat de cyclus het volgende doet, zoek naar de ontvangen naam in een map (die is degene die we zullen zoeken) , extraheer en kopieer het bestand (volledige naam al met extensie) en het absolute pad en creëer het in een ander doelbestand.

    Tot nu toe heb ik het volgende:

    terwijl lees regel
    do
    echo -e "$ line"
    zoek / home / mijngebruiker / dof "$ line" -exec readlink -f {};
    done <testlist.txt Tot dusver heb ik het bestand gelezen, elke regel die het heeft, maar ik kan het niet laten zoeken naar dat bestand en de informatie extraheren, als je me kunt helpen, dank je. Proost

  3.   pamela galaviz zei

    Heel erg bedankt voor de bijdrage 🙂

  4.   Mario Xavier zei

    hoi ... ik hoop dat je kunt helpen in de volgende oefening ... Pak het bestand uit in tgz in de opgegeven map, naast het specificeren van de gebruiker en groep voor alle bestaande mappen en bestanden, en het toewijzen van machtigingen aan bestanden en mappen
    opmerking: bestanden die klaar zijn om te lezen en te schrijven
    machtiging voor uitvoering van mappen

  5.   juank zei

    ARCH-DESTINATION is een variabele waarin we het pad van het bestemmingsbestand willen opslaan, behalve voor redundantie. Vervolgens geven we aan deze variabele de variabele DESTINATION aan, die hierboven het pad naar de map Documenten bevat en we voegen de "variabele" FILE toe, die de naam van het bestand bevat. Als dat bestand bijvoorbeeld list.doc was, zou de variabele ARCH-DESTINATION gelijk zijn aan /home/Usuario/Documentos/listado.doc

  6.   Laten we Linux gebruiken zei

    Het is het vorige artikel. Je hebt er toegang toe op http://usemoslinux.blogspot.com

    Knuffel! Paul.

  7.   openhartig zei

    Goedemorgen maat, bedankt, heel goed je blog, maar ik kan het eerste deel van Programmeren in Bash niet krijgen, waar ik het krijg bedankt, groeten

  8.   Saito Mordraw zei

    Twee buitengewone delen, mijn oprechte felicitaties.

    Gewoon geweldig.

  9.   Fredy zei

    Bien

  10.   Hugo zei

    Hallo, ik maak een programma met een CASE, wat ik wil dat het doet en ik weet niet hoe, bijvoorbeeld:

    echo Kiest een optie:
    echo
    echo 1. optie 1
    echo 2. optie 2
    echo 3. optie 3
    echo 4. optie 4
    echo 5. Afsluiten
    lees var
    geval "$ var" in
    1)
    echo "Je hebt optie 1 geselecteerd"
    ;;
    2)
    echo "Je hebt optie 2 geselecteerd"
    ;;
    3)
    gooide uit "….."
    ;;
    4)
    gooide uit "…."
    ;;
    5)
    gooide uit "…"

    ;;
    *)
    echo "verkeerde optie"
    ;;
    hexac

    ok, wat ik niet weet hoe ik het moet doen, is dat wanneer ik optie 4 selecteer, namelijk afsluiten, vraag of ik echt wil afsluiten en geef me 2 opties J & N

    en de andere is dat als je iets anders selecteert dan de nummers 1..5, niet op mij stemmen vanuit het script….

    Kunt u me helpen, bedankt.

  11.   DAPAMA21 zei

    Hallo, ik ben 1 maand geleden begonnen met scripten en dankzij jullie scriptposts. Ik zal ongeveer 15-20 hebben gedaan. Alvast heel erg bedankt. Maar nu heeft onze leraar ons een baan gegeven waarin ik stagneer. Omdat de leraar vraagt:
    door een directory door te geven, kopieer alle bestanden die in die directory staan ​​alfabetisch naar uw huis en noem ze file1 file2 etc ... etc ...
    Nu ben ik op het moment van zoeken of lokaliseren, ik wilde find gebruiken, maar als ik het een foutcode geef zoals ik het door dev null heb gezet, worden de rechten geweigerd, dan krijg ik het mis en zet ik de lokalisatie Ik ben hier:
    zoek $ 1 | grep "/ $ {1} \ $"
    maar met dit komt natuurlijk allemaal uit ...
    Heel erg bedankt als je het leest.
    Als je me kunt helpen, zou dat een grote gunst zijn.

  12.   luis zei

    Ik zou graag willen dat je me hierbij helpt.
    1.-Voer een geheel getal in op het toetsenbord en geef dit getal tweemaal en driemaal op het scherm weer. 2.- Maak een programma om te beslissen of een nummer ingevoerd via het toetsenbord deelbaar is door 3 of niet.
    3.- Maak een programma om de som te vinden van: ???????? + ???????? + ???????? + ???????? + ⋯? ???????
    4.- Maak een programma om de som 1 + 3 + 5 + 7 + 9 · · · + (2n + 1) te vinden.
    5. -Maak een programma dat het woord Linux 10 keer op het scherm afdrukt
    6. -Maak een programma dat het woord Linux op het scherm afdrukt, het aantal keren dat door een gebruiker wordt aangegeven.
    7.-Voer een bedrag in uren in en converteer ze naar minuten en seconden.
    8.-Bereken de oppervlakte van een driehoek
    9.-Voer een getal in met het toetsenbord, en als u 2 invoert, moet het in het kwadraat zijn, 3 in blokjes, 4 tot de vierde enzovoort tot 6.
    10-Bereken het pensioen dat een student moet betalen, de specialiteitscode moet worden ingevoerd en de dagen achterstand:
    CODE
    SPECIALITEIT
    BEDRAG
    DUUR PER DAG
    1
    COMPUTING
    160
    1
    2
    VERPLEGING
    150
    1.5
    3
    SECRETARIAAT
    140
    2
    4
    TOERISME
    180
    2.5
    5
    BOEKHOUDING
    160
    1
    U moet de specialiteit die u studeert, de kosten van het pensioen, het standaardbedrag en het totale te betalen bedrag laten zien.

  13.   charly zei

    Hallo, kan iemand mij helpen?
    Ik heb nodig «Vraag drie woorden aan via het toetsenbord en toon ze in alfabetische volgorde van A tot z»
    In Bash of sh-taal voor LINUX porfaborrrr