Semestrální práce z předmětu KIV/OS

Shell pro L*nux

Honza Bařtipán / A03043

bartipan@students.zcu.cz

Schopnosti shellu:

Přepínání mezi adresáři – příkaz cd

Vykonání jediného programu (i s přesměrováním do souboru)

Vykonání kolony s možností přesměrování do souboru

Možnosti rozšíření, na které bylo v návrhu struktury programu

pamatováno:

Doplňování při stisku tabulátoru

Správa úloh - přepínání běhu na pozadí / na popředí

Možnost doplnění o další operace mezi programy

Historie příkazové řádky

S -> "exit"

| "cd"

| "jobs"

| CMD

CMD -> CALL (SUFFIX)? (OP CALL (SUFFIX)?)*

CALL ->ID (ID|STRING)*

SUFFIX -> (("<" (ID|STRING))?

(">" (ID|STRING))?

(">>" (ID|STRING)?

) ("&")+

Gramatika shellu:

ID = [A-Za-z0-9_]+

STRING = "(^")*"

OP = |

Rozdělení na moduly:

Vstupní modul:

Čtení vstupu z klávesnice

Odchytávání tabulátoru

Historie

Exekuční modul:

Spouštění programu

Spouštění kolony

Parsovcí modul:

Zpracování řádky podle gramatiky

Design shellu:

Smyčka hlavního programu:

Shell shell;

CommandLine cmd("# ", &shell);

const char* line = cmd.readLine();

while (strcmp("exit",line) != 0){

try{

shell.parse(line);

}

catch(Parser::EParser e){

e.print();

}

line = cmd.readLine();

}

cout << endl;

//parser.parse("cd exit ident \"string\" & | ;");

return 0;

2005-01-20T00:12:08