+------------------------------------------+ | Self assessment-procedure voor de cursus | | De shell, sed en awk voor gevorderden | | van AT Computing | | | | Copyright 2008, AT Computing | +------------------------------------------+ Om in te schatten of u over voldoende voorkennis beschikt voor de cursus "De shell, sed en awk voor gevorderden", kunt u kijken of u voor de onderstaande vragen een oplossing zou weten. Let op: In de oplossingen voor onderstaande vragen komen niet alle onderwerpen aan de orde. U moet de vragen meer zien als een indicatie van het verwachte kennis- en ervaringsniveau. 1. Maak een (Bourne- of Korn-) shell file die als argumenten namen verwacht; voor ieder van die namen moet de shell file in de huidige directory een directory aanmaken. Die directories moeten alleen voor uzelf benaderbaar zijn. Bovendien moet in die directories een kopie van de file "Info" komen te staan. Foutcondities hoeven niet te worden afgehandeld. Voorbeeld van gebruik: $ ls -l total 4 -rw-r--r-- 1 henk docent 37 Dec 3 13:51 Info -rwxr-xr-x 1 henk docent 90 Dec 3 13:56 maak $ opg1 adm demo verslag $ ls -l total 10 -rw-r--r-- 1 henk docent 37 Dec 3 13:51 Info drwx------ 2 henk docent 512 Dec 3 13:57 adm drwx------ 2 henk docent 512 Dec 3 13:57 demo -rwxr-xr-x 1 henk docent 90 Dec 3 13:56 opg1 drwx------ 2 henk docent 512 Dec 3 13:57 verslag $ cat demo/Info Dit is een algemene informatie-file. $ 2. Breid de shell file uit: Zorg er voor dat er een foutmelding gegeven wordt als er geen parameters worden meegegeven. Bovendien moet er een foutmelding gegeven worden als het maken van een directory niet lukt. 3. Geef een commandoregel waarmee u uit alle files in de huidige directory alle regels rapporteert met daarop het woord "Linux" of "UNIX", met per regel hoe vaak die regel in het totaal voorkomt. Bijvoorbeeld: $ opg3 1 "UNIX", met per regel hoe vaak die regel in het totaal voorkomt. 1 directory alle regels rapporteert met daarop het woord "UNIX" of 2 tijdens een Linux-installatie kunt u, door het beantwoorden van 4. Schrijf een shell script dat twee of drie parameters verwacht: twee getallen en eventueel een filenaam. Het script moet met behulp van "sed" alleen de opgegeven range regels van de genoemde file (default: standard input) laten zien. Controle op correctheid van argumenten is niet nodig. Bijvoorbeeld: $ cat input.text Deze file bevat meer regels dan we eigenlijk zouden willen zien $ opg4 2 4 input.text bevat meer regels dan we eigenlijk zouden 5. Maak een shell script waarmee u, met behulp van "sed", alle voorkomens van het woord "een" in "1" wijzigt. Let op dat "geen" niet "g1" mag worden, en dat het woord "een" aan het begin of eind van een regel wel wordt gewijzigd. Voor het gemak mag u er van uitgaan, dat woorden alleen door spaties of begin resp. einde van de regel worden omgeven. Bijvoorbeeld: $ cat tekst De een en de ander Een plus een is geen drie Het aantal een-woorden op de volgende regel is een $ opg5 tekst De 1 en de ander 1 plus 1 is geen drie Het aantal een-woorden op de volgende regel is 1 6. Maak een shell script waarmee de gebruiker een "ls -l" van de als argument opgegeven directory krijgt, gevolgd door een samenvatting waarin het aantal files, de totale omvang van alle files, het aantal directories en de totale omvang van de directories wordt genoemd. Bijvoorbeeld: $ opg6 total 314 -rw-r--r-- 1 henk docent 1207 Dec 3 15:27 Info drwxr-xr-x 2 henk docent 512 Dec 3 15:28 adm drwxr-xr-x 2 henk docent 7168 Dec 3 15:30 data -rwxr-xr-x 1 henk docent 226 Dec 3 15:33 opg6 -rw-r--r-- 1 henk docent 137935 Dec 3 15:31 overzicht -rw-r--r-- 1 henk docent 309 Dec 3 15:31 temp -rw-r--r-- 1 henk docent 43 Dec 3 15:34 typescript Totaal voor 5 files: 139720 bytes Totaal voor 2 dirs: 7680 bytes 7. Maak een shell script waarmee, met behulp van "awk", de uitvoer van "ls -l" wordt getoond, gevolgd door het totale aantal bytes van de entries, gesommeerd per eigenaar van de files. Bijvoorbeeld: $ opg7 /usr/bin total 19760 drwxr-xr-x 2 root other 512 Jul 9 14:24 X11 -r-xr-xr-x 1 bin bin 33588 May 3 2007 acctcom ... -r-xr-xr-x 1 root other 10276 May 3 2006 ypwhich -r-xr-xr-x 3 bin bin 15144 May 3 2006 zcat Totalen per gebruiker: root: 1366576 bytes bin: 7652753 bytes lp: 219152 bytes uucp: 397742 bytes