Úkoly
Cílem je napsat skript.
-
[zápočtová úloha]
Vypište seznam všech souborů a podadresářů v aktuálním adresáři s informacemi o typu (soubor, adresář, symbolický odkaz) a právech (čtení, zápis, spuštění) pro spouštějícího uživatele, ve tvaru:
jméno_souboru typ práva. Řešte bez použití programuls.Upravte skript tak, aby
- při zadání argumentu
-a, zpracoval i skryté soubory a adresáře; - přijímal jako argument adresář, jehož obsah má vypsat. Při zadání neexistujícího adresáře skončí skript s chybou.
- při zadání argumentu
-
Naprogramujte „hádání“ (celého) čísla, které si uživatel myslí, z intervalu zadaného až dvěma argumenty, pomocí série dotazů „je číslo menší/větší než X?“ s odpověďmi ano/ne. Při jednom argumentu je levá mez intervalu 0, při žádném navíc pravá mez 100.
-
Implementujte zjednodušenou verzi programu
seq: výpis posloupnosti (celých) čísel oddělených mezerou od čísla zadaného jako první argument do čísla zadaného jako třetí argument, obojí včetně, s přírůstkem zadaným jako druhý argument – kladným, pokud je počáteční číslo menší nebo rovno koncovému, jinak záporným. Při dvou argumentech je chybějící přírůstek roven 1, při jednom je i chybějící počáteční číslo rovno 1. -
[zápočtová úloha]
-
Do aktuálního adresáře vygenerujte 1000 souborů se jmény
fooNNNN.txt, kdeNNNNnahraďte pořadovými čísly 0001 až 1000. Do každého souboru zapište náhodně vytvořené datum (ne nutně reálně existující, např. 30 únor je OK) ve tvaruDD/MM/YYYY. (Dny, měsíce a roky v obvyklém rozsahu.) (Nápověda:${RANDOM}.) -
Uvažujme adresář obsahující soubory ve tvaru
*NNNN.txt(symbol*představuje libovolnou předponu), každý z nich obsahuje datum ve tvaruDD/MM/YYYY. Vytvořte skript s tímto adresářem jako argumentem, který přesune soubory do podadresářů adresáře s cestami ve tvaruYYYY/MM/DDtak, aby si obsah souboru a jeho umístění odpovídaly. Každý podadresář bude existovat, jen pokud v něm bude alespoň jeden soubor.
-
-
Vypište řádek ze souboru
/etc/passwd, který se nachází nad řádkem odpovídajícím uživateli, který skript spustil. -
Vytvořte skript, který bude obálkou pro příkaz
mv. Bude brát stejné parametry a fungovat jakomv, pouze jméno cílového adresáře bude očekávat jako první parametr. -
Vytvořte skript se dvěma jmény (
min.shamax.sh), který bude dostávat jako parametry sérii čísel a spočítá jejich minimum nebo maximum, podle toho, se kterým jménem byl zavolán. (dvě jména = dva soubory se stejným obsahem, případně soubor a link, nápověda:basename) -
[zápočtová úloha]
Vytvořte skript, jehož prvním argumentem je adresář, zbytek argumentů pak tvoří přepínače pro příkaz
find. Skript příkazfindzavolá a soubory, které najde, interaktivně zkopíruje do adresáře předaného skriptu jako první argument. Před kopií každého souboru se skript uživatele zeptá, zda kopii provést. Možné odpovědi jsouano— soubor je zkopírován,ne— implicitní odpověď, soubor není zkopírován,stop— soubor není zkopírován a skript skončí.
Pokud skript neskončí pomocí
stop(ale projitím všech souborů), vypíše počet zkopírovaných souborů. -
[zápočtová úloha]
Vytvořte skript, jehož argumenty budou adresář
Aa souborS, obsahující na každém řádku koncovku jmen souborů (např.txt,jpeg). Skript v aktuálním adresáři vytvoří archiv souborů z adresářeA, které mají koncovky v souboruS. Archiv pojmenujeX-DDMMYYYY-HHMM.zip, kdeDDMMYYYYje datum aHHMMje čas spuštění skriptu. -
Vytvořte skript, který zjistí, jestli je aktuální uživatel
root. -
Napište skripty
min.shamax.shz úlohy 7 znovu tak, aby nespouštěly žádný externí program — tedy pouze s použitím expanze parametrů, aritmetické expanze$(( ))a vestavěných konstrukcí. -
Napište skript, který dostane jako argumenty jména souborů a u každého vypíše zvlášť adresář, jméno bez přípony a příponu, ve tvaru
adresář | jméno | přípona. Řešte bez použitíbasename,dirname,sedacut. Otestujte skript i na jménech obsahujících mezery a na jménech s více tečkami (archiv.tar.gz). -
Vytvořte skript, který v zadaném adresáři přejmenuje všechny soubory
*.txttak, že mezery ve jméně nahradí podtržítky. Skript musí korektně fungovat i v adresáři, kde žádný takový soubor není (nesmí se pokusit zpracovat soubor jménem*.txt), a nesmí přepsat existující soubor. -
Vezměte skript z úlohy 4b a ověřte jej příkazem
shellcheck. Opravte všechna hlášení SC2086 (chybějící uvozovky) a vysvětlete u každého z nich, jaký konkrétní vstup by chybu vyvolal.
Úkoly jsou převzaty (a případně drobně upraveny) z literatury a z webu http://outrata.inf.upol.cz/courses/shell/seminars.html.