Nastudujte použití regulárních výrazů a nástroje pro zpracování textu (alespoň zběžně grep, sed a tr):
Vytvořte skript v jazyce BASH, podle následujících požadavků:
.sh
.
skript.sh [OPTIONS] [FILE…]
FILE
, skript bude číst data ze standardního vstupu a výstup bude vypisovat na standardní výstup. V textu níže označuje slovo FILE
i data ze standardního vstupu.
FILE
(může jich být více) předpokládá, že to jsou zdrojové soubory v jazyce C a provede na nich operace podle zadaných přepínačů.
-h
vypíše stručnou nápovědu a ukončí skript. Kdykoliv je zadán, ostatní následující přepínače jsou ignorovány.
-i <prefix>
provede změnu názvů souborů v direktivě #include
ve všech souborech FILE
tak, že <prefix>
přidá na začátek názvu souboru. Uvažujte obě varianty direktivy #include
– jak pro soubory z aktuálního adresáře (“foo.h”
) tak pro systémové knihovny (<foo.h>
). Například pro -i lib/
, bude #include “foo.h”
změněno na #include “lib/foo.h”
.
-r
změní konvenci názvů funkcí použitých v souborech FILE (definice, deklarace a jejich volání). Pokud je název funkce tvořen slovy oddělenými jedním podtržítkem, odstraní podtržítka a pokud je následující znak písmeno změní ho z malého na velké. Jako slovo je považována kombinace malých písmen a číslic o jednom či více znacích. Například toto_je_funkce_2_priklad()
se změní na totoJeFunkce2Priklad()
. Nebude se měnit: _func()
, _func_xy()
, sin_Cos()
, remove_allX()
a internal__func()
. Předpokládejte, že mezi názvem funkce a levou závorkou není žádný komentář ani konec řádku.
(nepovinné, 1 bod) -f <regex>
v kombinaci s -r
omezí refaktoring jen na funkce, jejichž jméno odpovídá regulárnímu výrazu <regex>
. (priklad: uloha2.sh -r -f '^my' *.c
změní pouze názvy funkcí začínajících “my”)
při zadání přepínačů -i
i -r
skript vykoná obě funkce, bez těchto přepínačů skript soubor nezmění
při zadání jiného přepínače skript vypíše nápovědu a skončí s návratovou hodnotou 1
sed 's/./\U&/'
(viz dokumentaci), nebo tr '[:lower:]' '[:upper:]'
.
echo >&2 …
nebo set -x
)
Předpokládáme, že máte základní znalosti jazyka C a víte, jak funguje překlad ze zdrojových kódů jazyka C do binární spustitelné aplikace (v obecném případě, kdy je zdrojových souborů více).
Dále byste měli mít alespoň minimální povědomí o použití překladače gcc a jeho základních parametrech (gcc)
Nastudujte si použití nástroje make pro překlad programu v jazyku C/C++: make
Dále je pro absolvování cvičení nutné mít přehled o systémových voláních fork, pipe, dup, open, kill, wait a exec, tzn. měli byste vědět jak vzniká nový proces a jak lze přesměrovat standardní vstup a výstup. Potřebné informace se dozvíte na některé z předchozích přednášek.