====Feltételes utasítások==== Az előző fejezetben tárgyalt ''szamol.sc'' szkriptben oldjuk meg, hogy a második paraméter nulla értéke esetén ne történjen osztás művelet. Ehhez meg kell vizsgálni a második paramétert és ha az értéke egyenlő nullával, akkor a program figyelmeztessen szöveg kiírásával, ellenkező esetben pedig végezze el az osztást és a maradék számítását. Módosítsuk a szkriptet a következőre: #!/bin/bash echo "$1 + $2 = `expr $1 + $2`" echo "$1 - $2 = `expr $1 - $2`" echo "$1 * $2 = `expr $1 '*' $2`" if test $2 -eq 0 then echo "A nullával való osztás értelmetlen" else echo "$1 / $2 = `expr $1 '/' $2`" echo "maradék `expr $1 '%' $2`" fi Figyeljük meg a szkriptben az idézőjeleket, és azt, hogy itt már nem alkalmazunk változót az értékek kiszámításához, azok az ''echo'' parancs argumentumába vannak ágyazva parancs behelyettesítéssel. A szorzás sorában mindhárom típusú idézőjelet megtaláljuk.\\ Az ezután következik a feltételes utasítások gyakori formája: **if** kifejezés **then** utasítás1 **else** utasítás2. Ebben az //utasítás1// akkor kerül végrehajtásra, ha a kifejezés igaz. Hamis esetén az //utasítás2// kerül végrehajtásra. Az **if** szerkezet végét a **fi** jelöli.\\ A kifejezések kiértékelésére a **test** parancsot alkalmazhatjuk. ====A test parancs==== A **test** paranccsal ellenőrizhetjük fájlok tulajdonságait, karakterláncokat és számszerű adatokat.\\ A parancs szintaxisa a következő: ''test kifejezés'' vagy ''[ kifejezés ]''\\ A zárójelek mindkét oldalán egy elválasztó szóközt kell hagyni.\\ Az alábbi, ''nulle.sc'' nevű program nulla szöveget ír ki, ha az első paramétere 0: #!/bin/bash if test $1 -eq 0 then echo Nulla fi Tehát ebben az esetben a ''test $1 -eq 0'' kifejezés értéke igaz, ha a paraméter nulla: palferi@lizi:~/proba$ ./nulle.sc 5 palferi@lizi:~/proba$ ./nulle.sc 0 Nulla Láthatjuk, hogy más számot megadva paraméterként a program semmit sem ír ki.\\ A szkripben az alábbi szintaxist is használhatjuk: #!/bin/bash if [ $1 -eq 0 ] then echo Nulla fi ====Fájlok tesztelése a test paranccsal ==== Az alábbi táblázat a **teszt** parancs fontosabb argumentumait mutatja, amelyekkel fájlok tulajdonságait ellenőrizhetjük: ^ Argumentum ^ Jelentés | ^ Argumentum ^ Jelentés ^ | -d file | Igaz ha a file létezik és könyvtár | | -w file | Igaz ha a file létezik és írható | | -e file | Igaz ha a file létezik | | -x file | Igaz ha a file létezik és végrehajtható | | -f file | Igaz ha a file létezik és szabályos fájl | | -O file | Igaz ha a file létezik és az aktuális felhasználó tulajdonában van | | -h file | Igaz ha a file létezik és szimbolikus link | | -G file | Igaz ha a file létezik és az aktuális csoport tulajdonában van | | -r file | Igaz ha a file létezik és olvasható | | file1 -nt file2 | Igaz ha file1 újabb (a módosítási időt tekintve), mint file2 | | -s file | Igaz ha a file létezik és 0-nál nagyobb méretű | | file1 -ot file2 | Igaz ha file1 régebbi, mint file2 | ====Numerikus értékek tesztelése a test paranccsal ==== ^ Argumentum ^ Jelentés ^ | A -eq B | A és B értéke egyenlő | | A -ne B | A és B értéke nem egyenlő | | A -gt B | A nagyobb mint B | | A -ge B | A nagyobb vagy egyenlő mint B | | A -lt B | A kisebb mint B | | A -le B | A kisebb vagy egyenlő mint B | ====Karakterláncok tesztelése a test paranccsal ==== ^ Argumentum ^ Jelentés ^ | string1 = string2 |Igaz ha a sztringek megegyeznek | | string1 != string2 |Igaz ha a sztringek nem egyeznek meg | | -z string |Igaz, ha a karakterlánc hossza nulla | | -n string |Igaz, ha a karakterlánc hossza nem nulla | ====Logikai tesztek a test paranccsal ==== A test utasítás által támogatott logikai műveletek a következőek: ^ Argumentum ^ Jelentés ^ | expr1 -a expr2 | Igaz ha expr1 és expr2 is igaz | | expr1 -o expr2 | Igaz ha expr1 vagy expr2 igaz | | ! expr | Igaz ha expr hamis | ==== Gyakorló feladatok feltételes utasításokra ==== **1.** Írjon szkriptet ''gyak1.sc'' néven, ami összeszorozza két paraméterét, de ha csak egy paramétert adunk meg akkor négyzetre emeli! #!/bin/bash if [ $# -eq 1 ] then echo "$1 a négyzeten `expr $1 '*' $1`" else echo "$1 * $2 = `expr $1 '*' $2`" fi **2.** Írjon szkriptet ''gyak2.sc'' néven, ami a paraméterében megadott egész számról eldönti, hogy páros vagy páratlan, és az ennek megfelelő üzenettel tér vissza! #!/bin/bash P=`expr $1 '%' 2` if [ $P -eq 0 ] then echo "A $1 szám páros" else echo "A $1 szám páratlan" fi **3.** Írjon szkriptet ''gyak3.sc'' néven, ami a két paramétere közül a nagyobbat vonja ki a kisebből. Ha két paraméter egyenlő, az ''Egyenlők'' szöveg jelenjen meg. A script mind a ''./gyak3.sc 9 6'', mind a ''./gyak3.scp 6 9'' -re ezt írja ki: ''9 - 6 = 3'' #!/bin/bash if [ $1 -eq $2 ] then echo Egyenlők else if [ $1 -lt $2 ] then echo "$2 - $1 = `expr $2 - $1`" else echo "$1 - $2 = `expr $1 - $2`" fi fi **4.** Írjon szkriptet ''gyak4.sc'' néven, ami a ellenőrzi, hogy három paraméterrel futtatjuk és a paraméterek közül egyik sem nagyobb mint 90. Futtatáskor figyelmeztessen a paraméterek nem megfelelő számára vagy értékére. Megfelelő paraméterek esetén a ''Paraméterek rendben!'' szöveg jelenjen meg. #!/bin/bash if [ $# -eq 3 ] then if test "$1" -le 90 -a "$2" -le 90 -a "$3" -le 90 then echo "A paraméterek megfelelők" else echo "Nem megfelelő a paraméterek értéke" fi else echo "A paraméterek száma nem megfelelő" fi Mivel itt három feltételnek kell egyszerre érvényesülnie, a feltételek között logikai ÉS függvény van. Bonyolultabb feltételek esetén könnyebben értelmezhető a feltételes utasítás, ha szögletes zárójeleket valamint ''a && - logikai és'' és a ''|| - logikai vagy'' operátorokat használunk. A fenti példa ebben a beírásban: if [ $1 -le 90 ] && [ $2 -le 90 ] && [ $3 -le 90 ] Amennyiben a feltétel az lenne, hogy paraméterek közül legalább egy nagyobb mint 90, akkor azt így adhatnánk meg: if [ $1 -le 90 ] || [ $2 -le 90 ] || [ $3 -le 90 ] **5.** Írjon szkriptet, ami megjeleníti a Húsvét vasárnap dátumát a paraméterében megadott évben. Jelenjen meg mind a nyugati, mind az ortodox egyház ünnepének dátuma. Amennyiben ez a két dátum egybeesik, csak egyszer jelenjen meg.\\ Linuxban az ''ncal'' pranccsal tudjuk ezeket az adatokat megjeleníteni. A ''man ncal'' paranccsal jelenítsük meg és olvassuk el a parancs használatát és opcióit. Kilépés '' q'' billentyű.\\ (az ''ncal'' parancs Ubuntu és Debian Linux disztribúciókban alapértelmezetten megtalálható) #!/bin/bash HN=`ncal -e $1` HO=`ncal -o $1` if test "$HN" = "$HO" then echo "Húsvét vasárnap: $HN" else echo "Húsvét vasárnap a nyugati egyházban: $HN" echo "Húsvét vasárnap az ortodox egyházban: $HO" fi A változókat a test parancsban idézőjelekkel kell írnunk, mert a dátum szóközöket tartalmaz. [[st-linux_alapok:st-linux_alapok|< Vissza]]