Terminal Friday: Bash [Key Expansion]

Allereerst wil ik mijn excuses aanbieden, aangezien ik afgelopen vrijdag de post niet kon schrijven, dus vandaag zal ik een extra toevoegen om de verloren dag in te halen. 🙂

Brace-uitbreiding

In het Spaans lijkt sleuteluitbreiding mij een functie die is geïnspireerd door C Schelp, dit genereert combinaties tussen de karakters die tussen de accolades worden ingevoerd, de volgorde die het gebruikt is van links naar rechts. Het is helemaal niet ingewikkeld, maar het is een optie die erg handig zal zijn tijdens onze rondleidingen door GNU / Linux.

voorbeeld:

$ echo a {1,2,3} a1 a2 a3

Bij gebruik met komma's genereert combinaties tussen de waarde a en de waarden tussen de accolades. Als er geen waarde buiten de sleutels zou zijn, zou het elke waarde die de sleutel bevat slechts één keer weergeven.

$ echo {a, b, c} abc

Het gebruik ervan is helemaal niet ingewikkeld, er zijn andere, meer algemene voorbeelden, zoals het maken van veel mappen in een map

$ mkdir ~ / Jobs / {een, twee, drie, vier, vijf}

Dit creëert vijf mappen binnen de jobs-map, het is alsof je één commando tegelijk invoert. De 5 mappen maken.

Er is een uitbreiding met twee punten .. Dit creëert een reeks cijfers of tekens die van de beginwaarde naar de uiteindelijke waarde gaan, gebruik geen cijfers met letters.

$ echo {1..5} #Correct 1 2 3 4 5 $ echo {a..f} #Correct abcdf $ echo {a..5} #Onjuist {a..5} #Ik denk dat ik het nooit zal krijgen gewend aan deze blauwe kleur in brief

We kunnen tijd besparen door een cyclus te creëren For

#In plaats van $ te schrijven voor ((i = 1; i <= 5; i ++)); echo "Mijn nummer $ i"; done Mijn nummer 1 Mijn nummer 2 Mijn nummer 3 Mijn nummer 4 Mijn nummer 5 #Save code met behulp van accolade uitbreiding. $ voor i in {1..5}; do echo "Mijn nummer $ i; klaar Mijn nummer 1 Mijn nummer 2 Mijn nummer 3 Mijn nummer 4 Mijn nummer 5 # Natuurlijk is het geldig om te gebruiken, hoewel de uitvoer anders is. $ echo" Mijn nummer "{1..5} Mijn nummer 1 Mijn nummer 2 Mijn nummer 3 Mijn nummer 4 Mijn nummer 5

Nou ik denk dat het concept duidelijk is, haha ​​nu zal ik alleen maar zeggen dat het combineerbaar en genest is, wat bedoel ik hiermee?
Met combineerbaar dat we een of meer sleutels kunnen koppelen

$ echo {a..c} {1..3} a1 a2 a3 b1 b2 b3 c1 c2 c3

Met nesten zoals velen zich kunnen voorstellen, kunt u uitbreidingssleutels binnen uitbreidingssleutels gebruiken

$ echo {a, c {1..3}, d} a c1 c2 c3 d

En tot slot van Bash NIETS het is mogelijk om de waarden te verhogen.

$ echo {0..20..2} 0 2 4 6 8 10 12 14 16 18 20

Dit is alles voor vandaag, dus bedankt voor het lezen van mij mensen 🙂

Extra

Hoe u een lokale bak maakt

Als ik een bak local Ik bedoel een directory waarin we onze eigen scripts hebben en het is mogelijk om ze uit te voeren als een simpel commando ...

Om dit te bereiken is relatief eenvoudig, het eerste dat u moet doen, is een map maken waarin we de scripts zullen opslaan.

mkdir ~ / .bin # In dit voorbeeld zal het verborgen zijn

Nu hebben we onze map om de scripts op te slaan, maar het werkt pas als we het pad van de nieuwe .bin aan $ PATH hebben toegevoegd
Hiervoor wordt het bestand bewerkt bash_profiel, en de regel wordt toegevoegd.

exporteer PATH = $ PATH: ~ / .bin

En voila dat is genoeg om een ​​lokale bin te maken, het zal natuurlijk om rootrechten vragen als dat nodig is voor een voorbeeld dat we een snel script schrijven.

#! / bin / bash echo "Hallo $ 1, hoe gaat het?"

Bewaar het met de naam van Hallo
Het script krijgt uitvoeringsmachtiging en het is voldoende om het vanaf de terminal aan te roepen

$ hallo wada # Dit toont het bericht Hallo wada, hoe gaat het?

Dus met deze snelle truc kun je je scripts sneller uitvoeren

Dat is alles voor mensen die het vandaag goed doen 🙂
PS Sorry voor fouten, als die er zijn, gaan mijn ogen al dicht hahaha 😀


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.   djager zei

    Ik zit al heel lang in de bash-kwestie en ik had de brace-uitbreidingen deze niet begrepen, bedankt.

    Wat de padtruc betreft, doet Fedora standaard zoiets als dit, maar zie in "~ / .local / bin" een fragment uit het bash_profile dat ik naar Jessie heb gebracht.

    PATH = $ PATH: $ HOME / .local / bin: $ HOME / bin
    exporteer PATH

    1.    Ricardo zei

      Ik heb een aantal zorgen:
      1. Hoe zorg ik ervoor dat hij mij twee intervallen geeft met uitzetting in punten; leeftijden {1..24,55..90} en dat ik de leeftijd uitbreid van 1 tot 24 en verder ga met 55 tot negentig. zoals ik deed, werkte het niet. Waarom?

      2. Als ik wil dat de eerste waarde null is en ga verder met de nummering:
      wget: http://manga.favorito /beeld http://manga.favorito/imagen1
      Ik heb het op de volgende manier geprobeerd, maar wget kreeg het niet: http://manga.favorito/imagen{, 1..42} Volgens mij zou ik de voornaam zonder nummer moeten laten en doorgaan met de nummering van 1 tot 42, maar zo ging het niet. Waarom?

    2.    Wada zei

      Je hebt gelijk dat sommige distro's een .bin hebben of hadden, maar het is zodat iedereen kan begrijpen en zien dat het mogelijk is om het in elke distro te doen: D, Bedankt voor het langskomen.

  2.   demonstratie zei

    Heel goed, heel goed voor deze bijdragen van kennis aan de linux-wereld en zijn veiligheid, op een vrijdag hoop ik dat ik zou kunnen lezen hoe ik een pendrive in een terminal kan formatteren en een iso-dvd / cd-image van elk vrij systeem in een terminal kan branden.

    1.    Wada zei

      Bedankt voor je woorden broer 😀 Ik beloof dat ik aanstaande vrijdag die post zal doen. En ik moet er een over het aanpassen van Vim hahaha, maar ik wilde niet dat ze dachten dat het alleen Vim zou omvatten.

  3.   edoardo_or zei

    Uitstekend terminaal artikel, het beste dat ik in lange tijd heb gelezen, met verschillende blogs die tutorials van deze stijl publiceren. Heel erg bedankt!!

    1.    Wada zei

      Heel erg bedankt 😀 Ik zal proberen bij te blijven.

  4.   Juanli zei

    Uitstekende tip van de lokale prullenbak!
    Groeten!

    1.    Wada zei

      Uitstekend, geweldig dat het nuttig voor je is, heel erg bedankt voor het passeren van broer 😀

  5.   giskard zei

    Zeer goed! Geen idee hierover. Bedankt 🙂

    1.    Wada zei

      Graag gedaan, broeder, bedankt dat je de tijd hebt genomen om het te lezen 😀

  6.   Ricardo zei

    Ik heb een aantal zorgen:
    1. Hoe zorg ik ervoor dat hij mij twee intervallen geeft met uitzetting in punten; leeftijden {1..24,55..90} en dat ik de leeftijd uitbreid van 1 tot 24 en verder ga met 55 tot negentig. zoals ik deed, werkte het niet. Waarom?

    2. Als ik wil dat de eerste waarde null is en ga verder met de nummering:
    wget: http://manga.favorito/imagen http://manga.favorito/imagen1

    Ik heb het op de volgende manier geprobeerd, maar wget kreeg het niet: http://manga.favorito/imagen{, 1..42} Volgens mij zou ik de voornaam zonder nummer moeten laten en doorgaan met de nummering van 1 tot 42, maar zo ging het niet. Waarom?
    * Sorry maar ik heb het eerste bericht als antwoord geplaatst en het was in sommige delen fout

    1.    Wada zei

      1.- Je logica klopt niet, je moet het nesten hahaha probeer het maar $ echo {{1..24},{55..90}}

      2.- Hetzelfde als de vorige ... $ echo "URL"{,{1..42}}

      Maak je geen zorgen broeder, we zijn hier om ons te helpen 🙂

  7.   jvk85321 zei

    Om de voor te vervangen door echo zou het er zo uitzien

    echo "Mijn nummer" {1..5} $ '\ n' | sed -e: a -e '$! N; s / \ n / \ n /; ta' | sed -e: a -e '$! N; s / 5 \ n / 5 /; ta'

    maar ik heb liever printf

    printf "I, I% d \ n" {1..5}

    en gebruik hetzelfde concept van belangrijke uitbreiding

    atte
    jvk85321

    1.    jvk85321 zei

      Hoe zet je de klemmenkasten ????

      atte
      jvk85321

  8.   jvk85321 zei

    Testen of de codetag werkt
    hehe

    Om de voor te vervangen door echo zou het er zo uitzien

    echo “Mi numero “{1..5}$’\n’ | sed -e :a -e ‘$!N;s/\n /\n/;ta’ | sed -e :a -e ‘$!N;s/5\n/5/;ta’

    pero prefiero printf

    printf “Mi numero %d\n” {1..5}

    en gebruik hetzelfde concept van belangrijke uitbreiding

    atte
    jvk85321

    1.    jvk85321 zei

      Ik heb nog wat bugs, maar het werkte

      Ik woon maluco

      Sorry voor het storen

      atte
      jvk85321

      1.    Wada zei

        Hahaha heb je zelf geantwoord maar als het tussen labels staat geen spaties ...

        En over de vervanging van de voor is het niet nodig om zoveel te pijpen hahahaha genoeg met:
        echo -e "Mi numero "{1..5}"\n\b"

        Om eerlijk te zijn is printf de beste manier om tekst in scripts af te drukken, het is draagbaarder maar gebruikt traditioneel echo.

      2.    Wada zei

        Ik neem de ruimtes! hahahahaha

        laten we nu kijken 😀

      3.    Wada zei

        Fuck het is "kleiner dan" code "groter dan" "kleiner dan" / code "groter dan" hahahaha

      4.    jvk85321 zei

        Het probleem dat echo -e is niet standaard, dus het werkt niet op alle systemen.

        Komt ook rommelig uit
        jvk@jvktos:~$ echo -e "Mi numero "{1..5}"\n\b"
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5

        jvk@jvktos:~$
        En hiermee
        jvk@jvktos:~$ echo "Mi numero "{1..5}$'\n' | sed -e :a -e '$!N;s/\n /\n/;ta' | sed -e :a -e '$!N;s/5\n/5/;ta'
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        Ik denk dat de tweede het resultaat beter presenteert, hahaha

        atte
        jvk85321

      5.    jvk85321 zei

        Deze labels zijn een spelbreker, hehehe, laten we eens kijken of ze nu werken
        jvk@jvktos:~$ echo -e "Mi numero "{1..5}"\n\b"
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        En hiermee
        jvk@jvktos:~$ echo "Mi numero "{1..5}$'\n' | sed -e :a -e '$!N;s/\n /\n/;ta' | sed -e :a -e '$!N;s/5\n/5/;ta'
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        Ik denk dat de tweede het resultaat beter presenteert, hahaha
        atte
        jvk85321

      6.    jvk85321 zei

        Hoe dan ook, laat de spaties tussen de regels, daarom haat ik html, hahahaha

  9.   Joaquin zei

    Uitstekend! Ik klap in je voeten haha

    Ik wist niet dat sleutels konden worden genest, aangezien ik ze ook nooit heb geprobeerd te gebruiken, het scheelt echt veel code en het is ook beter leesbaar op deze manier. Dank je!

    1.    Wada zei

      Bedankt voor het passeren van broer, ik ben blij dat het nuttig was

      1.    Joaquin zei

        Graag gedaan, daarvoor zijn we hier, om te delen en mee te denken. Ik weet niet hoe ik moet programmeren, ik heb net een paar dingen gedaan in Bash en ik heb in twee posts een aantal scripts gepubliceerd die ik heb gedaan. Ik denk dat als ik dit weet, code gemakkelijker te begrijpen kan zijn.