Skript
Termín skript v informatice označuje konkrétní typ programu napsaného ve zvláštní třídě programovacích jazyků , nazývaných skriptovací jazyky . Specifickou třídou těchto programů jsou takzvané skripty shell , tj. skripty navržené tak, aby byly spouštěny v prostředí shellu operačního systému .
Popis
Rozdíl mezi normálním programem a skriptem není jasný, ale obecně lze ve skriptech identifikovat následující vlastnosti:
- relativně nízká složitost;
- používání tlumočeného jazyka ;
- integrace do procesu automatické konfigurace systému (například při každém spuštění nebo při každém přihlášení daného uživatele), do webové stránky (typicky pomocí jazyka JavaScript ), nebo v každém případě k provádění pomocných a velmi specifických úkolů;
- jistá linearita (skript může také přijímat vstupy od uživatele, ale obvykle různé vstupy podstatně nemění strukturu blokového diagramu , který popisuje chování skriptu);
- nedostatek vlastního grafického rozhraní ;
- volání jiných programů k provádění sofistikovanějších operací.
Shell skript
Skript shellu identifikuje skript pro textový shell operačního systému , tedy rozhraní příkazového řádku , jehož jazyk je považován za jednoduchý programovací jazyk pro danou doménu. Takový skript obvykle provádí úlohy související se správou systému , jako je manipulace se soubory (např. přejmenování, kopírování nebo přesun), spouštění jiných programů, tisk a manipulace s textem. Hlavní a nejrozšířenější výhodou ve srovnání s přímou interakcí s shellem pomocí psaní jednoho příkazu za druhým je automatizace, tedy možnost definovat jednou provždy prostřednictvím skriptu řadu zvláště podobných operací nebo operací, které lze charakterizovat v sofistikovaným způsobem. Psaní scénáře tímto způsobem zbavuje autora nudného opakování nebo potřeby pamatovat si určité detaily a ponechává ho prosté břemeno jeho provedení.
Ačkoli mnoho interpretů jazyků shellu má rozhraní příkazového řádku, jako jsou různé systémové shelly podobné Unixu (např . Bash , C shell , Zsh , Debian Almquist ) nebo shelly Windows ( PowerShell , cmd. exe nebo command.com ), několik dalších jazyků, jako AppleScript nebo Windows Script Host (WScript.exe), nemají je. Dalšími pozoruhodnými příklady jazyků shellu určených především pro psaní skriptů jsou jazyk digitálních příkazů ( DCL ) systémů DEC nebo jazyk řízení úloh ( JCL ) systémů IBM .
Výhody a nevýhody
Psaní skriptu shellu je často mnohem rychlejší než psaní ekvivalentního kódu v jiných programovacích jazycích. Mezi mnoho výhod patří snadný výběr programu nebo souborů, rychlý start a interaktivní ladění. Shell skript může být použit k poskytnutí sekvence a propojení s rozhodováním o existujících programech a pro středně velké skripty je absence kompilačního kroku výhodou. Interpretační provádění usnadňuje psaní ladícího kódu ve skriptu a také jeho opětovné spuštění detekcí a opravou chyb. Neodborní uživatelé mohou používat skripty k přizpůsobení chování programu a skripty shellu poskytují některé omezené možnosti vícenásobného zpracování .
Na druhou stranu je skriptování v shellu náchylné k nákladným chybám. Neúmyslné překlepy rm -rf * /(místo očekávaných rm -rf */) jsou v unixové komunitě folklórem, jediné místo navíc převede příkaz z jednoho, který odstraní všechny podadresáře, na jeden, který odstraní všechny a také se pokusí smazat všechny kořenové oddíly . Podobné problémy se mohou proměnit v nebezpečné zbraně a zneužití může smazat obsah souboru. To je ztíženo skutečností, že mnoho unixových příkazů se liší v názvu pouze jedním písmenem :
,, .cpmv>cpcncd
Další významnou nevýhodou je pomalá rychlost provádění a nutnost spustit nový proces pro téměř všechny prováděné příkazy shellu. Když je skript úlohou, lze jej provést vytvořením kanálu, ve kterém většinu práce provede účinný filtr příkazů a zmírní zpomalení; ale složitý skript je obvykle o několik řádů pomalejší než konvenční kompilovaný program, který provádí ekvivalentní operaci. Existují také problémy s kompatibilitou mezi různými platformami. Larry Wall , tvůrce Perlu , napsal, že „ je jednodušší portovat shell než skript shellu “.
Podobně lze provádět složitější skripty v mezích samotného skriptovacího jazyka shellu; Tato omezení znesnadňují psaní kvalitního kódu kvůli rozšířením různých shellů. Ve skutečnosti, pokud jste mysleli na řešení problémů shellu s původním jazykem shellu, mohli byste vytvořit nečekané horší problémy.
Mnoho nevýhod používání některých skriptovacích jazyků je způsobeno chybami v návrhu v syntaxi jazyka nebo implementace a nemusí být nutně vyvolány použitím základní textové příkazové řádky, existuje řada shellů, které používají jiné programovací jazyky shellu nebo dokonce skutečné jazyky typu Scsh (který používá schéma ).
Funkce
Klávesové zkratky
Ve své nejjednodušší podobě může skript Shell poskytnout pohodlnou variantu systémového příkazu, ve kterém se automaticky použijí konkrétní nastavení prostředí, volby příkazů nebo volby následného zpracování, ale způsobem, který umožňuje, aby nový skript stále fungoval jako normální Unixový příkaz.
Příkladem může být vytvoření nové verze ls , příkazu pro výpis souborů (s názvem příkazu kratším než l), které jsou normálně uloženy v binuživatelském adresáři, jako je:, / home / nomeutente / bin / la pre -Provided a výchozí volby příkazu.
#! / bin / sh
LC_COLLATE = C ls -FCas " $ @ "
Zde první řádek (Shebang) udává, který interpret by měl být použit k provedení zbytku skriptu, druhý řádek tvoří seznam s možnostmi indikátorů formátu souboru, sloupců, všech souborů (žádný není vynechán) a velikosti v blocích. LC_COLLATE=Cvýchozí je pořadí řazení velkých a malých písmen a "$@"způsobí, že všechny zadané parametry lbudou předány jako parametry ls, takže lze stále používat všechny normální volby a syntaxi, které ls zná.
Uživatel tedy musí být schopen jednoduše používat lpro běžně používané kratší seznamy.
Dávkové úlohy
Shell skripty umožňují, aby se četné příkazy, které je nutné ručně zadávat do rozhraní příkazového řádku, spouštěly automaticky, aniž by uživatel musel čekat na aktivaci každého kroku sekvence. Například v adresáři se třemi soubory zdrojového kódu C můžete místo ručního spouštění čtyř příkazů potřebných k sestavení konečného programu vytvořit skript shellu C , pojmenovaný build a uložený v adresáři spolu s nimi, který zkompiluje je automaticky:
#! / bin / csh
echo kompilace ...
cc -c foo.c
cc -c bar.c
cc -c qux.c
cc -o myprog foo.o bar.o qux.o
echo hotovo .
Skript by měl uživateli umožnit uložit upravovaný soubor, pozastavit editor, spustit jej pomocí příkazu . / buildk vytvoření aktualizovaného programu, otestovat jej a poté se vrátit do editoru. Od roku 1980 však byly takové skripty nahrazeny nástroji jako make , které se specializují na „sestavení“ programy. Když napíšeme příkaz (který budeme nazývat job, abychom ho odlišili od procesů) a stiskneme klávesu „enter“, provede se, ale protože jsme řídili vstup a výstup, můžeme také ovládat jeho provedení. Některé příkazy jsou složité a jejich spuštění by zabránilo použití shellu, dokud nebudou dokončeny. Poté můžete spustit příkaz na pozadí a mít shell opět volný pro další použití; můžete volat příkaz v popředí nebo jej pozastavit či zrušit. Chcete-li příkaz provést na pozadí, jednoduše vložte znak "&" na konec příkazu. Pokud bychom chtěli soubor prova.txt vytisknout na pozadí, stačilo by zadat příkaz lpr prova.txt &. Operační systém přidělí úloze jedinečné číslo a spustí ji tak, že ji označí znaménkem „+“ (aktivní úloha).
Pokud spustíme nový příkaz, bude mu přiděleno další číslo a označen znaménkem "-" (čeká na provedení). Chcete-li zjistit, které a kolik úloh běží, stačí zadat příkaz jobs a získat relativní výstup. Poté můžete příkazu povolit návrat do popředí pomocí příkazu fg následovaného znakem "%" a číslem úlohy. Pokud byste například chtěli přenést druhý příkaz do popředí, zadali byste fg% 2. Příkaz se nebude moci vrátit na pozadí, dokud nebude dokončen. Toto omezení je však možné obejít pozastavením úlohy pomocí kombinace kláves „CTRL Z“ a jejím restartováním pomocí fg nebo bg. Ukončený příkaz neoznámí uživateli ukončení jeho práce, pokud to není výslovně uvedeno prostřednictvím notify% 1 (v tomto případě upozorní na ukončení prvního příkazu). Konečně je možné příkaz násilně ukončit, pokud se například dostane do nekonečné smyčky. Linux poskytuje příkaz kill následovaný číslem, které identifikuje úlohu (např. % 1).
Generalizace
Jednoduché dávkové procesy nejsou pro izolované úlohy neobvyklé, ale použití smyček, testů a proměnných poskytuje uživatelům mnohem větší flexibilitu. Bash ( skript Bourne-Again shell) převádí obrázky JPEG na PNG a poskytuje názvy obrázků na příkazovém řádku - možná pomocí zástupných znaků - namísto toho, aby byly uvedeny ve skriptu, kde můžete tento soubor vytvořit, obvykle uložený jako/home /nomeutente/bin/jpg2png
#! / bin / bash
pro jpg v " $ @ " ; udělejte # místo každého daného souboru použijte $ jpg, naopak
png = " $ { jpg % .jpg } .png" # najděte PNG verzi názvu souboru nahrazením .jpg .png
echo převodem " $ jpg " .. # výstupní informace o stavu uživateli spouštějícímu skript
if convert " $ jpg " jpg.to.png ; pak # pomocí programu convert (běžného v Linuxu) vytvořte PNG v dočasném souboru
mv jpg.to.png " $ png " # pokud to fungovalo, přejmenujte dočasný obrázek PNG na správný název
else # ... jinak si stěžujte a ukončete
echo skriptu 'chyba: neúspěšný výstup uložen v "jpg.to.png".' 1 > & 2
exit 1
fi # konec konstruktu testu "if"
hotovo # konec cyklu "for"
echo všechny konverze úspěšné # sdělte uživateli dobrou zprávu
Příkaz jpg2png pak lze spustit na celém adresáři plném obrázků JPEGjpg2png *.jpg
Pravdivost
Klíčovou vlastností shellových skriptů je, že vyvolání jejich interpretů je zpracováno jako základní funkce operačního systému. Uživatelský shell tedy není schopen pouze spouštět skripty shellového jazyka nebo skript, který má správně zpracovánu pouze direktivu interpreta, pokud byl spouštěn ze shellu (což obojí bylo omezení v prvních letech shell skriptu Bourne-Again script ), skript shellu je inicializován a spuštěn samotným operačním systémem. Moderní skript shellu nelze umístit na stejnou úroveň jako systémové příkazy, ale mnoho systémových příkazů jsou ve skutečnosti skripty shell (nebo obecněji skripty, protože některé z nich nejsou interpretovány shellem, ale ze skriptovacích jazyků, jako je např. : Perl , Python nebo jiné jazyky). To platí také pro návratové ukončovací kódy, jako jsou jiné systémové nástroje, které indikují úspěch nebo selhání, což umožňuje jejich identifikaci jako součásti velkých programů bez ohledu na to, jak jsou tyto větší nástroje implementovány.
Stejně jako standardní systémové příkazy, skripty shellu klasicky vynechávají jakýkoli typ přípony souboru, pokud nejsou určeny ke čtení v shellu běžícím prostřednictvím speciálního mechanismu vyhrazeného pro tento účel (například: sh's "." nebo csh's source).
Programování
Mnoho moderních shellů také poskytuje různé funkce, které jsou běžně dostupné pouze při použití sofistikovanějších obecných programovacích jazyků , jako je řízení toku konstrukcí, proměnné, komentáře, pole, podprogramy a tak dále. S těmito druhy funkcí, které jsou k dispozici, je možné psát přiměřeně sofistikované aplikace, jako jsou skripty shellu. Stále jsou však omezeny skutečností, že většina jazyků shellu má malou nebo žádnou podporu pro systémové typování dat, třídy, vlákna, složitou matematiku a další plnou funkčnost společného jazyka a jsou obecně pomalejší ve srovnání s kompilovaným kódem. nebo interpretované jazyky psané rychle jako cíl výkonu.
Jiné programovací jazyky
Mnoho výkonných skriptovacích jazyků bylo zavedeno pro úlohy, které jsou příliš velké nebo složité na to, aby je bylo možné pohodlně zvládnout běžnými skripty shellu, ale pro které jsou žádoucí výhody skriptu a skutečná režie vývoje, kompilace programovacího jazyka. nevýhodné. Specifika toho, co odděluje skriptovací jazyky od programovacích jazyků na vysoké úrovni, je častým zdrojem debat. Ale obecně je skriptovací jazyk takový, který vyžaduje tlumočníka
Může se zdát, že se jedná o spekulativní prohlášení, protože se často uvádí mnoho důvodů: "Nicméně centrum skriptů údržby systému, které by případně mohlo být napsáno v jazyce, je nadále psáno jako skript pro systém. shell, protože není vždy možné se spolehnout na přítomnost příslušných motorů skriptovacího jazyka.
Pomocí skriptovacího jazyka můžete:
- vložit existující kódy dohromady
- zpracovávat velmi velké textové soubory
- manipulovat se soubory a adresáři
- využít specializovaných operátorů na vysoké úrovni
- vytvářet malé aplikace s krátkým vývojovým cyklem
- vytvářet aplikace s integrovaným GUI
- mají přenositelnost na platformách Unix, Windows a Macintosh
- mít interpretovaný kód (žádná kompilace / propojení)
Příklady skriptovacích jazyků:
- Bash
- AppleScript
- Batch (skriptovací jazyk používaný MS-DOS)
- ActionScript
- JavaScript (skriptovací jazyk, použitelný v C++ )
- Lua (skriptovací jazyk, použitelný v C++ )
- Perl
- Python (skriptovací jazyk, použitelný v C++ )
- PHP (skriptovací jazyk, použitelný v C++ )
- VBScript
- Tcl (skriptovací jazyk, použitelný v C++ )
Životní cyklus
Shell skripty často slouží jako raná fáze vývoje softwaru a často podléhají převodu po jiné základní implementaci , nejčastěji převedené na Perl , Python nebo C. Direktiva interpret umožňuje, aby byla podrobná implementace zcela skryta ve skriptu, místo aby byla vystavena jako přípona souboru, a poskytuje bezproblémovou reimplementaci ve více jazycích bez dopadu na koncové uživatele.
Související položky
Další projekty
Wikiknihy obsahují napsaný text nebo manuály
Externí odkazy
- Úvod do programování Shell od Grega Goebela nafaqs.org.
- Výukový program skriptování shellu UNIX/Linux od Steva Parkera nasteve-parker.org.
- Shell Scripting Primer (Apple) na adresedeveloper.apple.com.
- Na co si dát pozor při psaní přenosných shellových skriptů od Petera Seebacha nalinux.com. Získáno 4. května 2019 (z originálu archivováno24. března 2009).
- Bezplatné skriptovací knihy Unix Shell na freebookcentre.net .
- Scsh , na worldlingo.com .
- Skriptovací jazyky ( PDF ), na caspur.it .