Szkriptek készítése és futtatása¶
Futtatás¶
Python¶
PowerShell¶
Bash¶
Shebang
#!parancsértelmező [ nem kötelező paraméter ]
A számítástechnikában shebangnak nevezik a #! karakterpárt egy szkript elején. Más nevei sha-bang, hashbang, pound-bang, vagy hash-pling. Az elnevezésben a „bang” az időnként a felkiáltójelre is használt angol szó, a she-, sha- előtag az egyik leggyakoribb formájában a #!/bin/sh
-ban szereplő parancsértelmezőre, az sh-ra (Bourne shell) utal. Az egyéb elnevezésekben a „pound”, illetve „hash” a „#” jel angol neve.
Unix-szerű operációs rendszerekben (pl. Linuxban) – szemben a Windowszal – nem egy fájl kiterjesztése, hanem a fájlhoz rendelt végrehajtási jogosultság határozza meg, hogy az illető fájlt az operációs rendszer futtatható állománynak tekinti-e. Ez azonban nem elegendő, így futtatás előtt ellenőrizni kell a fájl típusát is annak meghatározásához, miként kell a fájlt futtatni (végrehajtani). Ez a fájl első néhány bájtjának alapján történik meg. Az operációs rendszer által értelmezhető parancsokat tartalmazó szöveges fájlok, az ún szkriptek is lehetnek végrehajthatóak, amennyiben azokat egy parancsértelmező (interpreter) program dolgozza fel. A Windowsban az ilyen fájloknak .bat kiterjesztése van. Unix-szerű operációs rendszerekben viszont ezt a szövegfájl első két bájtja dönti el. Ha egy szövegfájl első sorának első két karaktere #!, amit az interpreter abszolút elérési útvonalának megadása követ, akkor az adott fájl értelmezéséhez az így megadott interpretert használja az operációs rendszer. Például, ha egy szkript a következő sorral kezdődik: #!/bin/sh
, akkor a programbetöltő a /bin/sh interpretert használja. Linuxban ezt a viselkedést a kernel és a felhasználói kód együttműködése biztosítja.
Változó deklarációk¶
A programozási nyelvekben a változó úgy képzelhető el, mint egy hely, ami alkalmas egy érték tárolására a számítógép memóriájában. A változók alkalmazása a matematikában megszokotthoz hasonló kényelmes lehetőségeket biztosít.
A változó nevet kap, aminek segítségével a későbbiekben a változóban lévő objektumra hivatkozni lehet. Ez úgy működik, miként az emberek neve, amivel mások megszólíthatják. A matematikában és a számítógép-tudományban gyakran nagyon hasonló módon használjuk a változókat. Más módszer is van, ekkor változó úgy is létezhet, hogy nincs elnevezése. Jellemzően a változó neve a memória néhány bájtjának címét jelenti, így a változóra vonatkozó művelet e memória rész tartalmát használja, vagy módosítja. Ez a név szerinti kötés. Ha nagy adatterület szükséges, vagy pillanatnyilag (a program készítésekor) nem ismert a mérete, akkor a változóban nem közvetlenül az adatot tároljuk, hanem csak a memória érintett részére mutató hivatkozást.
A változók két fontos tulajdonságát külön ki kell emelni: az életciklust, és az érvényességi kört. A memória gazdaságossága érdekében a változónak az első használat előtt helyet kell biztosítani, a használat befejezésekor pedig fel kell szabadítani a területét. Az érvényességi kör segít meghatározni a változó életciklusát. A változó rendszerint a program kód valamelyik érvényességi körében van, tehát a változó a programrész aktiválódásakor keletkezik, majd megszűnik, amikor a programrész véget ér. Szokásosan azt mondjuk, hogy a változó az érvényességi körében „látszik”, másként pedig, csak akkor szükséges a változó, ha látszik. Így egy nem használt változó csak a memória területet foglalja feleslegesen. Emiatt a fordítóprogramok figyelmeztethetik a programozót, ha szerepel deklarált változó, amit sosem használ.
Láthatóság szerint
Globális: a változó hivatkozható bármely programrészből. Gyakori használata általában nem javasolt, mert túl sok globális változó esetén nehéz átlátni a változók összefüggéseit, az egymástól távol levő programrészek egymásra hatását.
Lokális: a változó csak egy alprogramon vagy blokkon belül érvényes, azon kívül nem hivatkozható. Az egymást tartalmazó blokkokban általában megengedett ugyanannak a változónévnek a használata. Ilyenkor csak a belső változó érhető el, "elfedi" a külsőt.
Adat típusa szerint
Skalár: A változó egy számot, logikai értéket, vagy más egyszerű adatot tartalmaz.
Mutató: A mutatók olyan speciális változók, amiknek az értéke egy memóriaterület, vagy egy másik változó címe.
Objekum: A változó tartalma a program egyik objektuma, vagy annak címe. Az objektum műveletei és adattagjai a változón keresztül használhatók.
Rekord: A változó adattartalma egy rekord. A rekord mezői általában a változó.mezőnév formában hivatkozhatók.
Tömb: A változó értéke egy tömb, a tömb egyes elemei egymástól függetlenül használhatók. Ennek leggyakoribb jelölése a <változó>[<index>]
forma.
Szöveges: A változó értéke egy karaktersorozat. A tároláshoz szükséges memória változhat futás közben, ezért gyakran mutatóval ábrázolják.
Élettartam szerint
Statikus: a változó a program futása során végig rendelkezésre áll.
Automatikus: az alprogramok lokális változói általában ilyenek. Az alprogram hívásakor foglalnak helyet a veremben, majd az alprogram befejezése után már nem lesznek használhatóak. Rekurzív hívásoknál ezért egyszerre több, ugyanannak a változónak megfelelő, de különöbző mélységekhez tartozó adat is lehet a memóriában.
Dinamikus: a program futásának csak egy részében hasznáható változó. A használat megkezdését általában jelölni szükséges (new). Élettartamának végét vagy jelölni kell (free,delete), vagy akkor történik, mikor a változó érvényességi körén kívül kerül, vagy egy hulladékgyűjtési folyamat számolja fel.
course_count = 42
students = ['Gergő', 'Péter', 'István']
course = Course(course_count, students)
$MyVariable = 1, 2, 3
$Path = "C:\Windows\System32"
$Processes = Get-Process
$Today = (Get-Date).DateTime
OF=/var/my-backup-$(date +%Y%m%d).tgz
STR="Hello World!"
Vezérlési szerkezetek¶
Vezérlési szerkezetnek nevezünk egy olyan programnyelvi konstrukciót, ami az összetevői végrehajtási sorrendjét adja meg. A vezérlési szerkezetek elemei elemi utasítások, vagy további szerkezetek lehetnek, kialakítva a programrész vezérlési felépítését.
Alapvető vezérlési szerkezeteink a szekvencia, az elágazás és a ciklus. Sok programozási nyelvben nincs rá eszköz, de bizonyos párhuzamos programozási helyzetek igényelhetnek további szerkezeteket, például a párhuzamos végrehajtás, kölcsönös kizárás, egy vagy több eseményre várakozás. Ezeket konstrukciók helyett gyakran speciális függvények használatával oldják meg.
Szekvencia
Szekvenciának nevezzük egyes utasítások (vagy blokkkok) egymás után történő végrehajtását. Rendkívül gyakran használt szerkezet, főleg az imperatív jellegű nyelvekben. Általában nem, vagy csak minimálisan kell jelezni. Jele az utasítások egymás mögé (alá) írása, vagy a ';', esetleg a ',' karakter lehet.
Elágazás
Akkor használunk elágazást, ha valamilyen feltételtől függően a programnak az adott helyzetben mást és mást kell elvégeznie. A végrehajtható ágak száma akár több is lehet.
Ciklus
Ciklusról beszélünk, ha egy programrész valamilyen feltételtől függően többször egymás után hajtódik végre. A feltételt ciklusfeltételnek, a részt a ciklus magjának hívjuk.
Feltétel nélküli vezérlésátadás
Vannak esetek amikor nem If szerkezet segítségével oldjuk meg a program menetének irányát, hanem a GOTO utasítás segítségével.
GOTO
"Programming style, like writing style, is somewhat of an art and cannot be codified by inflexible rules, although discussions about style often seem to center exclusively around such rules. In the case of the goto statement, it has long been observed that unfettered use of goto's quickly leads to unmaintainable spaghetti code. However, a simple, unthinking ban on the goto statement does not necessarily lead immediately to beautiful programming: an unstructured programmer is just as capable of constructing a Byzantine tangle without using any goto's (perhaps substituting oddly-nested loops and Boolean control variables, instead). Many programmers adopt a moderate stance: goto's are usually to be avoided, but are acceptable in a few well-constrained situations, if necessary: as multi-level break statements, to coalesce common actions inside a switch statement, or to centralize cleanup tasks in a function with several error returns. (...) Blindly avoiding certain constructs or following rules without understanding them can lead to just as many problems as the rules were supposed to avert. Furthermore, many opinions on programming style are just that: opinions. They may be strongly argued and strongly felt, they may be backed up by solid-seeming evidence and arguments, but the opposing opinions may be just as strongly felt, supported, and argued. It's usually futile to get dragged into "style wars", because on certain issues, opponents can never seem to agree, or agree to disagree, or stop arguing." - http://c-faq.com/style/stylewars.html
https://docs.python.org/3/reference/compound_stmts.html?highlight=cycle#the-for-statement
https://docs.python.org/3/reference/compound_stmts.html?highlight=cycle#the-if-statement
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/foreach-object?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_if?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_for?view=powershell-7.1
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_foreach?view=powershell-7.1
Tanuljunk szkriptnyelveket
Legalább egy szkriptnyelv használatának elsajátítása nagyban megkönnyíti a mindennapi és munkahelyi feladatok elvégzését.