Gyakorlat: shell scriptek

Megjegyzés

Parancsok: echo, változókezelés, read, ``, expr, .

  1. Készíts egy tetszőleges tartalmú szövegfájlt az mcedit segítségével! A fájl neve legyen proba.txt!
  2. Készíts shell scripet, mely kiírja a következő szöveget: Hello world!
  3. Készíts programot, mely az A váltózónak értéket ad, majd kiírja azt!
  4. Készíts programot, mely a billentyűzetről bekéri a felhasználó nevét, és személyesen köszönti őt!
  5. Készíts programot, mely kiírja a mai nap nevének angol rövidítését! Az akuális nap neve a date parancs megfelelő paraméterezésével nyerhető ki.
  6. Készíts programot, mely az VER változóba beolvassa a /etc/debian_version fájl tartalmát, majd kiírja azt! Ebben a fájlban a Debian/GNU Linux verziószáma található.
  7. Készíts programot, mely a billentyűzetről bekéri egy négyzet oldalának hosszát, majd kiírja annak kerületét és területét! A program neve legyen negyzet
  8. Példa a bemenet átirányítására: készítse el az oldal.txt fájlt, mely egy pozitív egész számot tartalmazzon. Használja fel az előző feladatban készített negyzet nevű programot úgy, hogy a szövegfájlban levő adatra végezze el a terület és kerület kiszámítását!
  9. Készíts programot, mely megadja, hogy a rendszergazda ebben a hónapban hányszor jelentkezett be! Írja ki ennek a számnak a kétszeresét is!
  10. Készíts shell scripet, mely egy hosszabb szöveget ír ki a képernyőre a Here In Document elv alkalmazásával!
  11. Készíts programot, mely paramétereit egy konfigurációs fájlból veszi! A NEV és a KOR nevű változókat olvassa be a params.conf fájlból, majd írja ki azok értékét!
  12. Készíts programot, mely bekéri egy felhasználó login nevét, és a /etc/passwd file-ból kikeresi annak teljes nevét! A program neve legyen usersearch! 

Elágazások

Megjegyzés

Parancsok: if, case, &&, ||

  1. Készíts programot, mely egy futásidőben bekért számról eldönti, hogy nagyobb-e, mint 5!
  2. Készítsünk olyan programot, amely bekér két számot, és kiírja a nagyobbikat a képernyőre. Ha a két szám egyenlő, azt is kijelzi.
  3. Egészítsük ki az előző feladatot azzal, hogy a futás során történt eseményekről részletes naplóbejegyzést készítünk a "~/naplo.log" file-ba oly módon, hogy minden futás önálló tartalmat generáljon, felülírva a korábbi naplózási eredményeket.
  4. Módosítsuk a naplózási stratégiát, hogy ugyanabba a file-ba növekményesen naplózódjanak az eredmények. Ekkor a futás elején írjuk bele a napófileba az aktuális dátumot és időt, majd a futási log bejegyzéseket.
  5. Oldjuk meg, hogy a script induláskor ellenőrizze le, hogy a napló fájl hossza meghaladja-e a 1 megabyte-ot. Amennyiben igen, úgy a napló fájlról készítsen másolatot naplo.old néven, majd hozzon létre egy üres napló fájlt, és folytassa a futást.
  6. Készíts programot, mely megjeleníti a ~/testfile fájl tartalmát. Ha a fájl nem létezik, akkor létrehozza azt, és beleírja a programot futtató felhasználó nevét (ezt a shell a $USER változóban teszi elérhetővé).
  7. Készíts programot, mely bekéri egy hét napjának sorszámát, és kiírja az ahhoz tartozó nap nevét!
  8. Készíts programot, mely bekéri egy téglalap oldalainak nagyságát, és kiírja annak területét. A programnak ellenőriznie kell, hogy a megadott oldal hosszak nagyobbak-e 0-nál.
  9. Készíts programot, mely ellenőrzi, hogy azt a root felhasználó futtatja-e, ha nem, akkor adjon hibaüzenetet!
  10. Készíts programot, mely bekéri egy felhasználó login nevét, és a /etc/passwd file-ból kikeresi annak teljes nevét! A program ellenőrizze, hogy a felhasználó valóban adott-e keresendő nevet, és adjon értelmes választ akkor is, ha a keresett felhasználó nincs a rendszerben!

Hibakezelés

Megjegyzés

Parancsok: $?

  1. Készíts programot, mely létrehozza a /tmp/testDir nevű könyvtárat! Az esetleges hibaüzenetek ne jelenjenek meg, de ha a könyvtár létrehozása sikertelen, akkor írjunk ki saját hibaüzenetet!

Ciklusok

Megjegyzés

Parancsok: for, seq, while, (expr, mail)

  1. Készíts shell scriptet, mely a billentyűzetről bekért szöveget 10-szer írja ki! A program sorszámozza az egyes sorokat!
  2. Készíts shell scriptet, mely a NEVEK változó tartalmát (mely szóközzel elválasztott keresztneveket tartalmaz) egymás utáni sorokban írja ki!
  3. A cimek.txt fájl e-mail címeket tartalmaz. Készíts shell scriptet, mely az ebben szereplő címekre egy teszt levelet küld! A cimek.txt fájl tartalma:
  4. test1@freemail.hu
    test2@gmail.com
    user3@vipmail.hu
    
  5. Alakítsd át a múlt órán írt négyzet területét és kerületét kiszámító programot úgy, hogy ne csak egy négyzet adatait dolgozza fel: egy négyzet feldolgozása után kérje be a következő oldalának hosszát. Az adatsor végét a már ismert CTRL-z jelezze. A program neve legyen negyzet2!
  6. Példa a bemenet átirányítására: készítse el az oldal2.txt fájlt, mely soronként egy pozitív egész számot tartalmazzon. Használja fel az előző feladatban készített negyzet2 nevű programot úgy, hogy a szövegfájlban levő összes adatra végezze el a terület és kerület kiszámítását! Példa az oldalak.txt fájl tartalmára:
  7. 3
    12
    43
    23
    
  8. Készíts shell scriptet, mely 3-tól 20-ig kettes lépésközzel ír ki számokat!
  9. Készíts shell scriptet, mely a nap minden órájára kiírja az akkor helyes köszönés formát! (pl reggel 8-kor "jó reggelt kívánok").
  10. Készíts shell scriptet, mely sorban feldolgozza az /etc könyvtár .conf kiterjesztésű fájljait! (A feldolgozás jelentse azt, hogy a program kiírja: "Feldolgozás: "!)
  11. Készíts olyan shell scriptet, mely másolatot készít a 10 bájtos, vagy annál nagyobb méretű .txt fájlokról, hozzáfűzve az aktuális dátumot a fájlnévhez ééééhhnn formában.
  12. Készíts shell scriptet, mely a billentyűzetről beolvasott sorokat nagybetűssé alakítja! A programot a "vege" szó begépelésével lehessen megállítani!
  13. Készíts shell scriptet, mely a NEVEK változó tartalmát (mely szóközzel elválasztott keresztneveket tartalmaz) egymás utáni sorokban írja ki!
  14. A cimek.txt fájl e-mail címeket tartalmaz. Készíts shell scriptet, mely az ebben szereplő címekre egy teszt levelet küld!
  15. Az adatok.txt fájl soronként két, szóközzel elválasztott számot tartalmaz. Készíts shell scriptet, mely az ebben levő számpárokat egy téglalap oldalaiként dolgozza fel, és kiírja azok kerületét és területét! Az adatok.txt fájl tartalma:
  16. 1 2
    3 4
    5 6
    7 8
    9 10
    
  17. A /tmp könyvtárban cnt kiterjesztésű fájlok vannak. Minden fájl neve egy e-mail cím, a tartalma pedig az aznap kiküldött e-mailek száma. Készíts programot, amely levélszám szerinti sorrendben sorrendben megjeleníti a levélküldők listáját!

Paraméterek

Megjegyzés

Parancsok: for, seq, while, (expr, mail)

  1. Készíts programot parmstest néven, mely kiírja saját nevét, paramétereinek számát, a paraméterek listáját, és a paramétereket egyenként! (Példa a kipróbálásra: ./parmstest alma körte dió)
  2. Készíts programrészt, mely két paramétert vár. Amennyiben a programot nem két paraméterrel hívjuk meg, adjon hibaüzenetet!
  3. Készíts programot, mely 10-nél több paramétert is képes sorban megjeleníteni! Tehát a sokParameter 1 2 3 4 5 6 7 8 9 10 11 12 13 14 eredménye mind a 14 paraméter megjelenítése legyen a válasz! (Ne feledd, a paraméterek csak $9-ig érhetők el!)
  4. Oldd meg az előző feladatot úgy, hogy egy paraméter feldolgozása után a további paramétereket a shift paranccsal rotálva éri el!
  5. Készíts programot parmtest néven, mely paraméterként két paramétert vár, egy kezdő- és egy végértéket, melyek közül bármelyik elhagyható. A program dologozza fel a két paramétert úgy, hogy azok tetszőleges sorrendben legyenek megadhatók a következő formában: parmtest -v vegertek -k kezdoertek (tehát a parmtest -k kezdoertek -v vegertek is helyes megadási forma). A feldogozás végén a script a kezdőértéket K-ba, a végértéket V-be tegye, és jelenítse meg e két adatot!

Függvények

  1. Készíts shell scriptet, mely tartalmaz egy szamol nevű függvényt, amely a paraméterként kapott szám alapján visszaadja az ilyen oldalhosszúságú nényzet területét!
  2. Készíts shell scriptet, mely egy szám faktoriálisát számítja ki! A program tartalmazzon egy fact nevű függvényt, mely az érdemi munkát végzi!
  3. Figyeld meg a változók hatókörét az alábbi program alapján!

Szignál kezelés

Megjegyzés

Parancsok: $$, trap

  1. Készíts shell scriptet, mely másodpercenként kiírja a saját processID-jét, s mindezt legfeljebb 1000-szer teszi meg! Az aktuális processz ID-je a $$ shell változóban van. (Bevezető gyakorlat.)
  2. Készíts egy shell scriptet, mely abban az esetben, ha azt a kill paranccsal le akarják állítani, még törli az átmeneti fájljait! Ahhoz, hogy ki tudjuk próbálni a programot, az másodpercenként írja ki az ő process ID-jét! (Kill szignált küldeni a kill paranccsal kell, ehhez érdemes egy újabb putty-t indítva még egyszer bejelentkezni a szerverbe. Példa a futtatásra:
  3. feri@aries:~$ ls /tmp/at*
    /tmp/atmeneti-21042.tmp
    feri@aries:~$ kill 21042
    feri@aries:~$ ls /tmp/at*
    ls: /tmp/at*: Nincs ilyen fájl vagy könyvtár
    
  4. Készíts shell scriptet sigtest néven, mely az előző feladathoz hasonlóan folyamatosan fut, másodpercenként írja ki a processID-jét és a NEV változó tartalmát. A NEV változó értékét a scriptnek a programmal azonos könyvtárban levő parameters.conf fájlból olvassa be a futás megkezdésekor! A scriptnek HUP szignált küldve az olvassa újra a parameters.conf fájlban levő változó értékét, és a másodpercenkénti kiírásban onnantól kezdve használja azt anélkül, hogy a programot leállítanánk! A parameters.conf tartalma a következő legyen:
  5. NEV="Kiss Pál"
    
    Példa a szignál küldésére és a NEV változó "Lajos"-ra változtatására egy másik putty-ban (innentől a másik ablakban futó program a Szabó Lajos nevet fogja másodpercenként a kimenetre írni):
    feri@aries:~/signalDemo$ echo "NEV=Lajos" >parameters.txt
    feri@aries:~/signalDemo$ kill -HUP 21703
    Példa a sigtest futására az egyik putty ablakban:
    feri@aries:~/signalDemo$ echo "NEV=Lajos" >parameters.txt
    feri@aries:~/signalDemo$ kill -HUP 21703
    Példa a szignál küldésére és a NEV változó Szabó Lajosra cserélésekor egy másik putty-ban (innentől a másik ablakban futó program a Szabó Lajos nevet fogja másodpercenként a kimenetre írni):
    feri@aries:~/signalDemo$ ./sigtest
    21703: 1 Kiss Pál
    21703: 2 Kiss Pál
    21703: 3 Kiss Pál
    21703: 4 Kiss Pál
    21703: 5 Kiss Pál
    21703: 6 Szabó Lajos
    21703: 7 Szabó Lajos