Terminal Friday: Bash [Extindere cheie]

În primul rând aș vrea să-mi cer scuze, deoarece vinerea trecută nu am putut scrie postarea, așa că astăzi voi adăuga un plus pentru a compune ziua pierdută. 🙂

Extinderea bretelei

În limba spaniolă, expansiunea cheii mi se pare a fi o funcție inspirată din c-coaja, aceasta generează combinații între caracterele care sunt introduse în interiorul parantezelor, ordinea pe care o folosește este de la stânga la dreapta. Nu este deloc complicat, dar este o opțiune care va fi foarte utilă în tururile noastre de GNU / Linux.

Exemplu:

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

Când se utilizează cu virgule (,) generează combinații între valoarea a și valorile din interiorul parantezelor. Dacă nu există nicio valoare în afara parantezelor, aceasta se va afișa doar o dată pe fiecare valoare pe care o conține cheia.

$ echo {a, b, c} abc

Utilizarea sa nu este deloc complexă, există alte exemple mai frecvente, cum ar fi crearea multor directoare într-un folder

$ mkdir ~ / Jobs / {unu, doi, trei, patru, cinci}

Aceasta creează cinci foldere în folderul joburi, este ca și cum ai introduce o comandă la un moment dat. Crearea celor 5 directoare.

Există expansiune cu două puncte .. acest lucru creează o serie de numere sau caractere care merg de la valoarea inițială la valoarea finală, nu utilizați cifre cu litere.

$ echo {1..5} #Correct 1 2 3 4 5 $ echo {a..f} #Correct abcdf $ echo {a..5} #Incorrect {a..5} # Cred că nu voi primi niciodată obișnuit cu această culoare albastră din scrisoare

Putem economisi timp creând un ciclu pentru

# În loc să scrie $ for ((i = 1; i <= 5; i ++)); ecou „Numărul meu $ i”; gata Numărul meu 1 Numărul meu 2 Numărul meu 3 Numărul meu 4 Numărul meu 5 #Salvați codul utilizând extensia de bretele. $ pentru i în {1..5}; ecou "Numărul meu $ i; terminat Numărul meu 1 Numărul meu 2 Numărul meu 3 Numărul meu 4 Numărul meu 5 #Bineînțeles este valabil să se utilizeze, deși rezultatul este diferit. $ echo" Numărul meu "{1..5} Numărul meu 1 Numărul meu 2 Numărul meu 3 Numărul meu 4 Numărul meu 5

Ei bine, cred că conceptul este clar, haha ​​acum voi doar să comentez că este combinabil și imbricat. Ce vreau să spun prin asta?
Cu combinabil la care putem uni una sau mai multe taste

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

Cu imbricarea, așa cum mulți și-ar imagina că puteți utiliza cheile de expansiune în interiorul tastelor de expansiune

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

Și în sfârșit de la Lovitură 4 este posibil să crească valorile.

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

Totul este astăzi, așa că mulțumesc că mi-ai citit oamenii reading

în plus

Cum se creează un coș local

Când spun a bin local mă refer la un director în care avem propriile noastre scripturi și este posibil să le executăm ca o simplă comandă ...

Realizarea acestui lucru este relativ ușoară, primul lucru pe care trebuie să-l faceți este să creați un director în care vom salva scripturile.

mkdir ~ / .bin # În acest exemplu va fi ascuns

Acum avem folderul nostru pentru a salva scripturile, dar nu va funcționa până când nu adăugăm calea noului .bin la $ PATH
Pentru aceasta, fișierul este editat bash_profileși se adaugă linia.

export PATH = $ PATH: ~ / .bin

Și voila, care este suficient pentru a crea un coș local, bineînțeles că va cere permisiuni root dacă este necesar pentru un exemplu, scriem un script rapid.

#! / bin / bash echo "Bună $ 1, ce mai faci?"

Salvați-l cu numele de Alo
Scriptului i se acordă permisiunea de execuție și va fi suficient doar să îl apelați de la terminal

$ hola wada # Aceasta va afișa mesajul Hello wada, ce mai faci?

Deci, cu acest truc rapid puteți rula scripturile mai repede

Asta-i tot pentru oamenii de astăzi care sunt bine 🙂
PS Îmi pare rău pentru greșeli, dacă există, ochii mei deja se închid hahaha 😀


26 comentarii, lasă-le pe ale tale

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   dhunter el a spus

    Sunt în problema bash de mult timp și nu înțelegusem extinderea bretelei astea, mulțumesc.

    Despre trucul de cale, Fedora implicit face așa ceva, dar în „~ / .local / bin”, uită-te la un fragment din bash_profile pe care l-am adus lui Jessie.

    PATH = $ PATH: $ HOME / .local / bin: $ HOME / bin
    exporta CALEA

    1.    Ricardo el a spus

      Am unele îngrijorări:
      1. Cum îl fac să-mi acorde două intervale cu extindere prin puncte; vârste {1..24,55..90} și pentru a extinde vârstele de la 1 la 24 și a continua cu 55 la nouăzeci. așa cum am făcut, nu a funcționat. De ce?

      2. Dacă vreau ca prima valoare să fie nulă și să continui cu numerotarea:
      wget: http://manga.favorito /imagine http://manga.favorito/imagen1
      Am încercat în felul următor, dar wget nu a obținut: http://manga.favorito/imagen{, 1..42} Potrivit meu, ar trebui să las prenumele fără număr și să continui cu numerotarea de la 1 la 42, dar nu a fost așa. De ce?

    2.    Wada el a spus

      Ai dreptate, unele distribuții au sau au avut un .bin, dar este astfel încât toată lumea să poată înțelege și să vadă că este posibil să o faci în orice distribuție: D, Mulțumesc că ai trecut pe aici.

  2.   Demo el a spus

    Foarte bine, foarte bine pentru aceste contribuții de cunoștințe la lumea Linux și securitatea acesteia, vineri, sper că aș putea citi cum să formatez un pendrive într-un terminal și să arăt o imagine ISO DVD / CD a oricărui sistem gratuit dintr-un terminal.

    1.    Wada el a spus

      Mulțumesc pentru cuvintele tale frate 😀 Promit că vinerea viitoare voi face această postare. Și trebuie să vorbesc despre personalizarea Vim hahaha, dar nu am vrut să creadă că ar cuprinde doar Vim.

  3.   edoardo_or el a spus

    Excelent articol terminal, cel mai bun pe care l-am citit de mult timp, numărând mai multe bloguri care publică tutoriale de acest stil. Mulțumesc mult!!

    1.    Wada el a spus

      Mulțumesc mult 😀 Voi încerca să țin pasul.

  4.   juanli el a spus

    Sfat excelent al coșului de gunoi local!
    Salutări!

    1.    Wada el a spus

      Excelent, grozav că îți este de folos, îți mulțumesc foarte mult că ai trecut fratele 😀

  5.   giskard el a spus

    Foarte bine! Nici o idee despre asta. Mulțumesc 🙂

    1.    Wada el a spus

      Ești binevenit frate, mulțumesc pentru că ți-ai făcut timp să-l citești 😀

  6.   Ricardo el a spus

    Am unele îngrijorări:
    1. Cum îl fac să-mi acorde două intervale cu extindere prin puncte; vârste {1..24,55..90} și pentru a extinde vârstele de la 1 la 24 și a continua cu 55 la nouăzeci. așa cum am făcut, nu a funcționat. De ce?

    2. Dacă vreau ca prima valoare să fie nulă și să continui cu numerotarea:
    wget: http://manga.favorito/imagen http://manga.favorito/imagen1

    Am încercat în felul următor, dar wget nu a obținut: http://manga.favorito/imagen{, 1..42} Potrivit meu, ar trebui să las prenumele fără număr și să continui cu numerotarea de la 1 la 42, dar nu a fost așa. De ce?
    * Ne pare rău, dar am pus primul post ca răspuns și a fost greșit în unele părți

    1.    Wada el a spus

      1.- Logica ta este greșită trebuie să o cuibărești hahaha încearcă cu $ echo {{1..24},{55..90}}

      2.- La fel ca și precedentul ... $ echo "URL"{,{1..42}}

      Nu-ți face griji, frate, suntem aici pentru a ne ajuta 🙂

  7.   jvk85321 el a spus

    Pentru a înlocui for cu ecou, ​​ar arăta astfel

    ecou „Numărul meu” {1..5} $ '\ n' | | sed -e: a -e '$! N; s / \ n / \ n /; ta' | sed -e: a -e '$! N; s / 5 \ n / 5 /; ta'

    dar prefer printf

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

    și utilizați același concept de expansiune cheie

    Atte
    jvk85321

    1.    jvk85321 el a spus

      Cum puneți terminalele ????

      Atte
      jvk85321

  8.   jvk85321 el a spus

    Testarea dacă eticheta de cod funcționează
    hehe

    Pentru a înlocui for cu ecou, ​​ar arăta astfel

    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}

    și utilizați același concept de expansiune cheie

    Atte
    jvk85321

    1.    jvk85321 el a spus

      Am rămas cu niște bug-uri, dar a funcționat

      Trăiesc maluco

      Scuze de deranj

      Atte
      jvk85321

      1.    Wada el a spus

        Hahaha ai răspuns singur, dar dacă este între etichete fara spatii ...

        Și la înlocuirea celor pentru nu este necesar să faceți atât de mult pipă hahahaha suficient cu:
        echo -e "Mi numero "{1..5}"\n\b"

        Pentru a fi sincer printf este cel mai bun mod de a imprima text în scripturi, este mai portabil, dar folosește în mod tradițional ecoul.

      2.    Wada el a spus

        Iau spațiile! ha, ha, ha, ha, ha

        să vedem acum 😀

      3.    Wada el a spus

        La naiba este „mai puțin decât” cod ”mai mare decât„ „mai puțin decât” / cod ”mai mare decât„ hahahaha

      4.    jvk85321 el a spus

        Problema că echo -e nu este standard, deci nu funcționează pe toate sistemele.

        Iese, de asemenea, dezordonat
        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:~$
        Și cu asta
        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:~$

        Cred că al doilea prezintă rezultatul mai bine, hahaha

        Atte
        jvk85321

      5.    jvk85321 el a spus

        Aceste etichete sunt o prostie, hehehe, să vedem dacă se rezolvă acum
        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:~$

        Și cu asta
        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:~$

        Cred că al doilea prezintă rezultatul mai bine, hahaha
        Atte
        jvk85321

      6.    jvk85321 el a spus

        Oricum, lasă spațiile dintre linii, de aceea urăsc html, hahahaha

  9.   Joaquin el a spus

    Excelent! Vă bat din picioare haha

    Nu știam că tastele pot fi imbricate, deoarece niciodată nu am încercat să le folosesc, într-adevăr economisește o mulțime de cod și, de asemenea, este mai ușor de citit în acest fel. Mulțumesc!

    1.    Wada el a spus

      Vă mulțumesc că ați trecut frate, mă bucur că a fost utilă

      1.    Joaquin el a spus

        Sunteți binevenit, pentru asta suntem aici, pentru a împărtăși și a contribui cu idei. Nu știu cum să programez, am făcut doar câteva lucruri în Bash și am publicat în două postări câteva scenarii pe care le-am făcut. Cred că știind acest lucru poate face codul mai ușor de înțeles.