Egyszerű szekvencia, azaz sorozatok generálása

Linux scriptek

Ezt a rész sem lesz olyan, amit napi szinten fogsz használni! De érdemes ismerni a shell-ben ezt a lehetőséget is, mert időnként jól jöhet. A shell szekvencia generáló lehetőségét vizsgáljuk meg. Mi is az a szekvencia? Sorozat. Egyszerűen ügy fogalmazhatjuk meg,hogy egy megadott rendben elkészített sorozat. Ilyen szekvencia az 1,2,3,4, vagy az a,b,c, d, de a 2,4,6,8 is. A Bash-szekvencia kifejezés egész számok vagy karakterek sorozatát hozza létre a tartomány kezdő és végpontjának meghatározásával. Így szól a hivatalos meghatározás. Általában for hurkokkal, ciklusokkal kombinálva használjuk, de (és itt fontos ez a de) nem csak programozásnál, shell scripteknél használhatjuk, hanem egyszerű módszerrel a parancssorban is.

A scriptekben gyakrabban használjuk, hiszen ott sokszor kell egy sorozatot, szekvenciát előállítani. Ez egy nagyon egyszerű, így korlátozott tudású megoldás, a seq parancshoz képest. Ha komolyabb szekvenciák kellenek akkor a seq-et érdemes használni.

A shell szekvencia felépítése

A felépítése nagyon egyszerű:

{START..END[..INCREMENT]}

  • A kifejezés { nyitó zárójelekkel kezdődik és } záró zárójelekkel fejeződik be. (alt gr +b vagy n)
  • START és END lehet pozitív egész szám vagy egyetlen betű karakter.
  • A START és az END értékek kötelezőek, és két ponttal elválasztva vannak egymástól. Két pont! Nem három!
  • Az INCREMENT érték nem kötelező. Ha van, akkor azt END-et két ponttal el kell választani az értékétől, és nincs szóköz közöttük.
  • Ha nincs INCREMENT érték, akkor a lépésköz egy.
  • Karakterek megadásakor a kifejezés lexikográfiai sorrendben bővül. Azaz ABC sorrendben.
  • A kifejezés minden számra vagy karakterre érvényesítve lesz, START és END a megadott értékeket is beleértve. Az {1..5} az 1 2 3 4 5 lesz. Bár logikus, de nem minden program ezt az elvet követi, így érdemes megemlíteni ezt külön.
  • A helytelenül formált kifejezés változatlan marad. Jellemzően a két pont helyett hármat írok, vagy felesleges szóközöket használok.
  • Ha a START nagyobb, mint az END érték, akkor visszafele kapjuk az értékeket {3..0} kimenete 3 2 1 0 lesz.

Kipróbálásra a legegyszerűbb, ha

for i in {0..100..2}
do
echo "Kiment: $i"
done

igencsak „komoly” scriptet készítjük el, majd pár variációt megadunk, lefuttatjuk és máris kiismerjük a megfelelő szinten ezt a lehetőséget. Ilyen próba javaslat a 0..100 majd a 0..100..4 és a a..z és a fordítottja z..a ezután már csak finomítások jöhetek 000…10 stb.

Ha nincs kedved a fenti scriptet megírni, akkor az

echo {00..20..2}

mintájú is működni fog. OK, ha parancssorból is megy, akkor már két gyors felhasználási módja is van.

Több esetben kell ABC minden betűjével könyvtárat létrehozni, fájlok szortírozásához. Ez már nem okoz gondot:

mkdir {a..z}

Villámgyorsan megteszi. Hasonlóan tudunk generáltatni számokkal is, így a tavalyi év összes számlájának csináljunk egy havi bontású könyvtárszerkezetet:

mkdir 2019_{1..12}_számlák

Ahogy látni elő és utótagot is írhatunk a szekvenciákhoz. De nem jelent gondot a {2018..2021}_{1..12}_számlák használata sem! Igen intelligensen megoldja!

A másik ha fájlokat akarunk létrehozni, egy megadott rendben. Hozzunk létre a jövő hónap minden napjára egy üres szövegfájlt, amibe majd a naplónkat írjuk:

touch 2020_06_{1-30}.txt

Valóban nem mindennap kell ilyen! A felhasználása sok esetben valóban a scriptekre korlátozódik, ennek ellenére a fenti két példa jól mutatja, hogy sima parancssoros megoldásokkal egyszerűbbé tehetünk pár feladatot.