Csatlakozás a panra.inf.elte.hu-re Linux alapparancsok man: man ls #ls parancs manuál, help clear: clear #a karakteres képernyő törlése ls: ls #könyvtár tartalom listázása ls l #könyvtár tartalom listázása tulajnságaival ls a #könyvtár tartalom listázása a rejtett fájlokkal együtt ls al #könyvtártartalom listázása a rejtett fájlokkal együtt részletes tulajnságokkal pwd: pwd #aktuális könyvtár cd: cd public #belépés a public könyvtárba cd #kilépés a root könyvtárba cd public/elso #belépés a public Elso nevű almappájába cd../ #visszalépés egy szintet cd../masodik #visszalépés egy szintet és onnan a Masodik mappába lépés mkdir: mkdir Teszt #Teszt nevű könyvtár létrehozása mkdir v Keksz #Keksz nevű könyvtár létrehozása visszajelzéssel rmdir: rmdir Keksz #Keksz nevű könyvtár törlése rmdir v Teszt #Teszt nevű könyvtár törlése visszajelzéssel rmdir --ignore-fail-on-non-empty v Teszt #Teszt nevű könyvtár törlése visszajelzéssel, akkor is törli, ha van benne valami echo: echo Eltések vagyunk mi, fasza gyerekek! #képernyőre (std output) írás cp: cp teszt.txt../keksz #átmásolja a teszt.txt nevű fájlt a Teszt mappából (benne vagyok) a Keksz mappába cp../keksz/teszt.txt ujneven.txt #átmásolja a teszt.txt nevű fájlt Kekszből Tesztbe új néven cp v ujneven.txt../ #átmásolja az ujneven.txt nevű fájlt Tesztből Masodikba visszajelzéssel rm: rm teszt.txt #törlöm a teszt.txt fájlt a Teszt mappából rm v../keks z/teszt.txt #törlöm a teszt.txt fájlt a Keksz mappából visszajelzéssel
mv: mv ujneven.txt Keksz #áthelyezem az ujneven.txt fájlt a Masodik mappából Keksz mappába mv v Keksz/ujneven.txt. #áthelyezem az ujneven.txt fájlt a Kekszből a Masodikba visszajelzéssel ln: ln s v../ujneven.txt #parancsikon féle (soft link) létrehozása a Masodik mappa ujneven.txt fájljához passwd: passwd #INF jelszó mósítás uname: uname #a szerver operációs rendszer lekérdezése uname a #a szerverről minden információ whoami: whoami #kiírja hogy ki vagyok who: who #kiírja hogy kik vannak belépve who a #kiír egyéb információkat is who d #kiírja az x idővallumon belüli meghalt kapcsolatokat who H #kiírja az aktív kapcsolatokat who u #kiírja a belépett felhasználókat date: date #a szerver dátum idejének kiírása date +%Y-%m-%d_%H:%M:%S #a dátum kiírása megatt formában cat: cat >teszt.txt #ha nincs teszt.txt akkor létrehozom, különben felülírom Első #beleírok pár sort Második Harmadik Ctrl + D #kilépek a sorok írásából cat teszt.txt #kiírom a teszt.txt tartalmát cat >> teszt.txt #hozzáfűzök a teszt.txt-hez, ha nincs ilyen néven akkor létrehozza Négy Ötödik sor Hatodik sor, ez az utolsó Ctrl + D #kilépek a hozzáfűzésből head: head n 3 teszt.txt #kiírja a teszt.txt szövegfájl első 3 sorát head c 30 teszt.txt #kiírja a teszt.txt első 30 byte-át tail: tail n 4 teszt.txt #kiírja a teszt.txt utolsó 4 sorát tail c 20 teszt.txt #kiírja a teszt.txt utolsó 20 byte-át more: more teszt.txt #kiírja a fájl tartalmát, soronként lehet lefele lépkedni, felfele nem léphetek q #kiléphetek menetközben q-val, vagy akár végiglépkedhetek ENTER-rel less: less teszt.txt #kiírja a fájl tartalmát, soronként fel-le lehet lépkedni q #kilépni csak q-val tuk tar: tar cvf proba.tar *.txt #létrehozok egy tar fájlt, amibe csak a.txt fájlokat rakom bele a mappából tar cvf ujproba.tar teszt.txt #létrehozok egy tar fájlt, amibe csak a teszt.txt fájlt rakom bele a mappából tar xvf ujproba.tar * #kicsomagolom az ujproba.tar fájlt zip: zip proba.zip *.txt #proba.zip-be tömörítem a.txt fájlokat unzip: unzip proba.zip teszt.txt #teszt.txt fájl kicsomagolása a proba.zip fájlból gzip: gzip v teszt.txt #teszt.txt fájl becsomagolása gunzip: gunzip v teszt.txt.gz #teszt.txt fájlt kicsomagolása
diff: diff teszt.txt masik.txt find: find size 1k find size -10k find perm 644 find name *.txt find name *.txt size 1k perm 644 grep: grep odik teszt.txt grep sor teszt.txt masik.txt grep r dik./teszt grep r l sor * chmod: #összehasonlítja a két fájlt, hol különbözik egymástól #1 kilobyte-nál nagyobb fájlok keresése #10 kilobyte-nál kisebb fájlok keresése #644-es hozzáférési jogú fájlok keresése #.txt fájlok keresése az att mappában, az att szinten #az előző lgok együtt #fájlban keres olyan szavakat, amiben szerepel az odik #egyszerre több fájlban is kereshetek, most a sor szót keresem #a Teszt könyvtárban a dik-es sorokat keresi (fájlokban) #az összes állományban keresi a sor szót, eredménybe csak a fájl nevét adja chmod 777 masik.txt #minden jogosultságot megak a fájlnak (én, csoport, mások r + w + x) chmod o-x-w masik.txt #a más felhasználóktól elveszem a futtatási és írási jogot chmod v g+w teszt.txt #a csoportomban lévő felhasználóknak ak írási jogot, és visszajelzést várok sleep: sleep 10 #10 másodperc alvás, vagyis 10 másodpercig semmit nem lehet csinálni sleep 240 & #4 perc alvás a háttérben, közben lehet lgozni ps: ps #kiírja az általam futatott folyamatokat ps aux #részletesebben írja ki az általam futatott folyamatokat top: top #részletesen táblázat formában írja ki az általam futatott folyamatokat és a globális rendszerállapotot nice: nice -n 5 sleep 20& #5-tel növelem a folyamat prioritási számát (P: -20-tól 19-ig, alap 0; -20 a legnagyobb prioritás) nice -n -2 sleep 20& #2-vel növelem a folyamat prioritását (feljebb); növelni csak root joggal lehet jobs: vi #ez (szövegszerkes ztő) csak azért kell, hogy legyen olyan folyamat, ami éppen lgozik (kilépés Ctrl + Z) jobs #kiírja az éppen lgozó programokat fg: fg %1 #előtérbe hozza az 1-es job azonosítóval (megnézni jobs-sal) rendelkező folyamatot bg: bg %1 #háttérbe küldi az 1-es job azonosítóval (megnézni jobs-sal) rendelkező folyamatot kill: kill -9 11052 #tutira leállítja a 11052 proces azonosítóval (megnézni ps-sel) rendelkező folyamatot áttovábbítás: tail n 7 teszt.txt >> masik.txt #a text.txt utolsó 7 sorát hozzáfűzi a masik.txt fájlhoz változók használata: $a = ELTE #egy változónak értéket ak echo $a #kiírja hogy ELTE szűrők használata: who > nevek #létrehoz egy nevek fájlt, kiterjesztés nélkül sort nevek #sorok szerinti sorrend who sort r u #fordított sorrend, egyedi sorok who wc l #bejelentkezett felhasználó szám cat nevek grep pista #eredményül kapjuk a pista-t tartalmazó sorokat
Átirányítás ~$ man date > temp.txt ~$ head n 10 temp.txt > date.txt man date head n 10 > date.txt ~$ rm temp.txt ~$ cat /proc/cpuinfo grep yes > yes.txt ~$ echo alma barack szilva > gyumolcs.txt #a gyumolcs.txt-ben egy sor lesz, ami "alma barack szilva" Rendezés ~$ who sort #rendezi a belépet felhasználókat abc sorrendbe ~$ ls la sort #rendezi a fájlokat jogosultság szerint (abc sorrendbe), mivel azzal kezdődik a sor Az első script írása ~$ mcedit #ez egy megjegyzés, az előző sor azért kell, hogy a bash értelmezze a scriptemet #Ez az első scriptem echo "Hello World!"; (F2 [elsoscript.sh]) #elmentem elsoscript.sh néven (F10) #kilépek az mcedit szövegszerkesztőből ~$ chmod u+x elsoscript.sh #futtatási jogot ak magamnak, másképp: chmod 744 fajlnev ~$./elsoscript.sh #futtatom a scriptet Egyszerre két parancs futtatása ~$ who q; date #;-vel elválasztva futtathatók két parancsot egy parancsként Üdvözlő üzenet készítése ~$ cd #a home könyvtárba lépek ~$ mcedit #!/bin/bash echo "Üdvözöllek! Az aktuális dátum és idő:"; date +%Y-%m-%d_%H:%M:%S #a dátum kiírása megatt formában (F2 [.profile]) #elmentem elsoscript.sh néven (F10) #kilépek az mcedit szövegszerkesztőből ~$ chmod u+x elsoscript.sh #futtatási jogot ak magamnak, másképp: chmod 744 fajlnev ~$./elsoscript.sh #futtatom a scriptet ~$ alias lla="ls -al" #létrehozás ~$ lla #használata ~$ unalias lla #törlés ~$ alias #aliasok lekérdezése ~$ env #környezeti változók lekérdezése ~$ echo $USER #a USER környezeti változó kiírása Aliasok használata Környezeti változók Futtatható fájlokat keresendő mappák (PATH) ~$ export PATH=$PATH:./ #hozzáam az aktuális mappát ~$ export PATH=$PATH:/afs/inf.elte.hu/user/g/gr/grofftamas/szamalap/ #így már az att mappában lévő scripteket már fájlnevekkel tum futtatni
~$ set #a globális változók kiírása ~$ export alma="körte" #saját változó létrehozása ~$ unset alma #törlés Globális változók ~$ a = fradi; ~$ echo "hajrá $a!" #hajrá fradi! ~$ fa = virág; ~$ echo "alma\$fa"; #alma$fa ~$ echo "alma$fa"; #almavirág Lokális változók \,', " és {} használata ~$ szeretem="utálom" #lokális változó létrehozása ~$ echo A tökfő zeléket $szeretem #kimenet: "A tökfőzeléket utálom" ~$ echo A tökfőzeléket \$szeretem #kimenet: "A tökfőzeléket $szeretem" ~$ echo 'A tökfőzeléket $szeretem' #Az 'között' letilt minden különleges karaktert; kimenet: "A tökfőzeléket $szeretem" ~$ echo "A tökfőzeléket $szeretem" #ez egy ajánlott módszer; kimenet: "A tökfőzeléket utálom" ~$ tipus=mobil #egy lokális változó létrehozása ~$ echo $tipustelefon #egybe akarom kiírni, de ez nem jó megoldás; kimenet: "" ~$ echo ${tipus}telefon #kimenet: " mobiltelefon" ~$ a=mobil #lokális változó ~$ b=telefon #lokális változó ~$ echo ab #kimenet: "ab" ~$ echo $ab #kimenet: "" ~$ echo $a$b #kimenet: " mobiltelefon" ~$ echo ${ab} #kimenet: "" ~$ echo ${a}${b} #kimenet: " mobiltelefon" ~$ echo '\"' #kimenet: "\"" ~$ echo "$a$b" #kimenet: " mobiltelefon" ~$ echo '$a' #kimenet: "$a" A read parancs használata ~$ mcedit hasznalread.sh #!/bin/bash rendezo="tarantino"; #lokális változó létrehozása film="django"; #egy másik lokális változó echo "$rendezo filmje a $film"; #kimenet: "Tarantino filmje a Django" echo "Adj meg egy Tarantino film címet: "; read -s film; #beolvasok egy filmcímet, de titkosítva úgy, mint a jelszót echo "$rendezo filmje a $film?"; #kiírom a beolvasott adatot egy szöveggel ~$ chmod u+x hasznalread.sh #futtatási jogot ak magamnak, másképp: chmod 744 fajlnev ~$./hasznalread.sh #futtatom a scriptet ~$ mcedit udvozlo.sh #!/bin/bash echo "Hello! Adja meg a vezetéknevét: "; read vnev; echo "Adja meg a keresztnevét: "; read nev; echo "A te neved $vnev $nev"; Parancs behelyettesítés
datum=`date +%Y-%m-%d_%H:%M:%S`; #így am meg, hogy ez nem egy sima szöveg, hanem parancs echo "Mai dátum: $datum"; #így itt végrehajtja a parancsot és az eredményt írja a $datum helyére ki_vagy=`whoami`; #megam a parancsot echo "Te valójában $ki_vagy vagy!"; #parancsbehelyettesítés a szövegkörnyezetbe mostdatum="date"; #most sima stringként adtam meg a parancsot eval $mostdatum; #az eval parancs parancsként értelmezi a $mostdatum tartalmát ~$ chmod u+x udvozlo.sh #futtatási jogot ak magamnak, másképp: chmod 744 fajlnev ~$./udvozlo.sh #futtatom a scriptet Read, parancs behelyettesítés és manual ~$ mcedit manparancs.sh #!/bin/bash echo"adj meg egy parancsot: "; #bekérek egy parancsot read parancs; #például: who man $parancs; #futtatom a parancs manualját $parancs; #végrehajtom a parancsot echo "Köszönöm, hogy megadtad a $parancs parancsot!"; #kiírom a parancsot (vagyis a nevét szövegként) ~$ chmod u+x manparancs.sh #futtatási jogot ak magamnak ~$./manparancs.sh #futtatom a scriptet Paraméterek használata 1. ~$ mcedit paramhasznal.sh #!/bin/bash echo -n "Parancs neve:"; #kiírom a parancs (vagyis a script nevét) echo $0; #kimenet: "./paramhasznal.sh" echo -n "Első paraméter:"; #a -n kapcsolóval sortörés nélkül írhatunk ki echo $1; #kimenet: "alma" echo "Második paraméter:$2"; #akár így is írhatom őket; kimenet: "barack" #echo "A tízedik paraméter:${10}"; #10-től már így kell írnom echo -n "Paraméterek s záma:"; echo $#; #kimenet: "3" echo -n "Összes paraméter - stringként:"; echo $*; "kimenet: "alma barack dinnye" echo -n "Összes paraméter - string sorozatként:"; echo $@; #kimenet: "alma barack dinnye" ~$ chmod u+x paramhasznal.sh #futtatási jogot ak magamnak ~$./paramhasznal.sh alma barack dinnye #futtatom a scriptet; a paramétereket megam Bonyolult feladat Feladat: Írj egy olyan scriptet, amely az első paraméterben megatt parancsot végrehajtja és a kimenetét a második paraméterbe továbbítja! ~$ mcedit atiranyit.sh #!/bin/bash $1 > $2; #$1 végrehajtja a parancsot, a > áttovábbítja a $2-nek ~$ chmod u+x atiranyit.sh #futtatási jogot ak magamnak ~$./atiranyit.sh #futtatom a scriptet
cut használata ~$ echo "a b cd" cut -f2 -d "" #2. mezőt kivágom a szóköz elválasztó karakterrel (egy mező egy szó); kimenet: "b" ~$ echo "abcdef" cut -c 2,4 #a 2. és 4. karakter kivágása; kimenet: "bd"; alapértelmezett mezőelválasztó a TAB ~$ echo "ab cd ef" cut -d'' -f2 #2. mezőt kivágom; kimenet: "cd" Feladat: Ábécé sorrendben mentsük ki a felhasználóneveket a felhasznalok.txt fájlba az /etc/passwd fájlból ~$ cat /etc/passwd cut -f1 -d ":" sort >> felhasznalok.txt #az /etc/passwd fájl első mezőjét (ami a :-tal van elválasztva) ábécé sorrendbe rendezem és a felhasznalok.txt-be mentem Feladat: Olvassunk be egy karaktersorozatot (x=nev&y=jelszo) és bontsuk fel, aztán írjuk ki egy.html fájlba ~$ mcedit cuthasznal.sh read alma; #x=gyurika&y=dikkma #beolvasom az adatot login=`echo $alma cut -f1 -d"&" cut -f2 -d"="`; #kivágom a felhasználónevet password=`echo $alma cut f2 -d"&" cut -f2 -d"="`; #kivágom a jelszót echo '<html>'> gyurkaweb.html; #létrehozok egy gyurkaweb.html fájlt echo '<head><title>gyurkaw EB</title></head>'>> gyurkaweb.html; #és ebbe fűzőgetek sorokat echo '<body bgcolor="#a1c1a1">'>> gyurkaweb.html; bekezdes="<p>azonosítója: ${login}, jelszava: ${password}!</p>"; #felhasználom a felhasz.nevet és jels zót echo $bekezdes >> gyurkaweb.html; echo '</body>'>> gyurkaweb.html; echo '</html>'>> gyurkaweb.html; ~$ chmod 744 cuthasznal.sh #futtatási jogot ak magamnak ~$./cuthasznal.sh #futtatom a scriptet ~$ ls -l tee file.txt less #létrehozás tee használata sort használata ~$ cat szamok.txt sort #rendezem a számokat ~$ cat szamok.txt sort r #fordított sorrendbe rendezem a számokat ~$ cat szamok.txt sort u #rendezem a számokat és az egyformákat csak egyszer írom ki ~$ cat szamok.txt sort b u #az elején lévő szóközöket elhagyom és rendezem a s zámokat egyedileg uniq használata ~$ cat szamok.txt sort uniq #szamok.txt-ben lévő számokat rendezem és egyedisítem (mindegyik csak egyszer lesz) wc használata ~$ who wc #a who eredményének sor, szavak száma és bájt értékének kiírása ~$ who wc -l #a who sor számának kiírása (hány sort ad eredményül); a sorvégi entereket számolja ~$ who wc -w #a who eredmény szavak számát adja ~$ who wc -c #a who eredmény karakterek számát adja grep használata ~$ cat vers.txt grep -i szív #"szív" karakterrészt tartalmazó sorok, ahol nem különbözteti meg a kis -NAGY betűket ~$ cat vers.txt grep -c szív #"szív" karakterrészt tartalmazó sorok száma ~$ cat vers.txt grep -n szív #"szív" karakterrészt tartalmazó sorok a sorindexekkel együtt ~$ cat vers.txt grep -v szív #"szív" karakterrészt nem tartalmazó sorok ~$ cat vers.txt grep -w szív #"szív" szót tartalmazó sorok ~$ grep -r 'alma'./versek #a versek könyvtárban (mappában) az alma -s sorokat (fájlokban) keresi ~$ grep -r -l 'alma'./versek #a versek könyvtárban (mappában) az alma -s sorokat tartalmazó fájlok nevét írja ki ~$ cat vers.txt grep -w -v -c szív #"szív" szót nem tartalmazó sorok száma ~$ cat vers.txt grep -w -v -n s zív #"szív" szót nem tartalmazó sorok a sorindexekkel együtt
~$ env grep LA #"LA" karakterrész keresése az env fájlban ~$ env grep ^LA #"LA" karakterrésszel kezdődő szavak keresése ~$ cat vers.txt grep hoz$ #"hoz" karakterrésszel végződő szavak keresése ~$ cat vers.txt grep k.r.k #"k?r?k" karakterrész keresése, ahol a. egy tetszőleges karakter (kerek,kerék,kérek,stb.) ~$ cat vers.txt grep ^a.*fa$ #"a fa" szavak keresése; a * előző minta is métlése 0 vagy többször (pl. almafa) További mintaillesztési parancsok karakterhalmazok megadása: [..] [a-z] (kisbetű) [^a-c] (nem a,b vagy c karakter) [A-Za-z0-9] (alfanumerikus: szám vagy betű) [0-9] (s zámjegy) speciális kapcsolókkal \w (alfanumerikus) \W (nem alfanumerikus) \d (számjegy) \s (szóköz, TAB, sortörés) szavak illesztése \< szókezdet (pl. grep "\<Zol" \> szóvég (pl. grep "tán\>" EGrep féle kapcsolók (pl.: ls egrep "par pelda" #par vagy pelda karakterrészt tartalmazó sorok (fájlok) keresése) + (pl.: ls egrep "\<p+f" #szó elején 1 vagy több p-t, majd f betűt tartalmazó sorok keresése)? (pl.: ls egrep "param\d?" #param és semmi vagy egy szám; az előző minta 0 vagy 1-szer) {n} #az előző karakter pontosan n-szer (pl.: cat almafa egrep "^[a-b]\w{5}" #a vagy b kezdésű és még 5 alfanumerikus) {2,4} #az előző minta 2,3 vagy 4-szer ismételve {1,} #előző minta legalább 1-szer () #egy csoportba foglalás [0-9]{8}(\s[0-9]{8}){1,2} #bankszámla ^[+-]?[0-9]+([,.][0-9]+)?[0-9]$ #előjeles szám tizedes ponttal, vagy vesszővel (pl. -234[.12]) tovább példák \w+[\.-_\w*]*@\w+(\.\w+)+ #e-mail cím (([01][0-9]) (2[0-3])):[0-5][0-9]:[0-5][0-9] #óra:perc:másodperc Összetett szűrő parancsok ~$ getent passwd tee felhasznalok.txt wc -l #passwd fájlban lévő sorokat lementem és a sorok számát kapom ~$ cat felhasznalok.txt cut -f5 -d ":" #a felhasznalok.txt-ből az 5. mezőket vágom ki ~$ cat felhasznalok.txt cut -f1 -d ":" sort head -n 10 #a who eredmény szavak számát adja Sikeres parancs volt-e? ~$ cat >van_ilyen.txt #létrehozok egy van_ilyen.txt fájlt Első Második #beleírok pár sort Harmadik Ctrl + D #kilépek a sorok írásából ~$ cat nincs_ilyen.txt #kiakarok írni egy olyan fájlt, ami nem létezik ~$ echo $? #sikerült-e a művelet?; most az eredmény 1, vagyis nem ~$ cat van_ilyen.txt #kiírom a korábban létrehozott fájlt ~$ echo $? #sikerült-e a művelet?; most az eredmény 0, vagyis igen
test parancs használata ~$ test -e nincs_ilyen.txt; echo $? #létezik-e a fájl? ~$ test -d ujmappa; echo $? #mappa-e? ~$ test -s van_ilyen.txt; echo $? #van benne valami adat? ~$ test -r van_ilyen.txt; echo $? #olvashatom? ~$ test -w van_ilyen.txt; echo $? #írhatom? ~$ test -x van_ilyen.txt; echo $? #futtathatom? Aritmetikai műveletek shellben ~$ x="piros" #létrehozok egy lokális változót ~$ echo "Nyári $x alma!" #szöveg összefűzés művelete; kimenet: "Nyári piros alma!" ~$ y=$x+fa; echo $y #azt akarom, hogy fűzze össze a + jel segítségével, nem lehet; kimenet: "piros+fa" ~$ a=5; b=$a+1; echo $b #a számokkal se működik, mert a shellben minden szöveg; kimenet: "5+1" ~$ a=2; let b=$a+1; echo $b #az összeadás művelete a let parancs segítségével; kimenet: "3" ~$ expr 2 \+ 1 #az összeadás művelete az expr parancs segítségével; kimenet: "3" ~$ let x=3*4; echo $x #a szorzás művelete a let parancs segítségével; kimenet: "12" ~$ expr 3 \* 4 #a szorzás művelete az expr parancs segítségével; kimenet: "12" ~$ let x=3-4; echo $x #a kivonás művelete a let parancs segítségével; kimenet: "-1" ~$ expr 3 \- 4 #a kivonás művelete az expr parancs segítségével; kimenet: "-1" ~$ let x=10/4; echo $x #az osztás művelete (egész képzés) a let parancs segítségével; kimenet: "2" ~$ expr 10 \/ 4 #az osztás művelete (egész képzés) az expr parancs segítségével; kimenet: "2" ~$ let x=10%3; echo $x #a maradékképzés művelete a let parancs segítségével; kimenet: "1" ~$ expr 10 \% 3 #a maradékképzés művelete az expr parancs segítségével; kimenet: "1" Logikai vizsgálatok ~$ expr 3 \< 7 #3 kisebb, mint 7? ~$ expr 3 \<= 7 #3 kisebb, mint 7 vagy egyenlő? ~$ expr 3 \> 7 #3 nagyobb, mint 7? ~$ expr 3 \>= 7 #3 nagyobb, mint 7 vagy egyenlő? ~$ expr 3 \= 7 #3 egyenlő 7-tel? ~$ expr 3 \!= 7 #3 nem egyenlő 7-tel? ~$ [ 5 -eq 7 ]; echo $? #5 egyenlő 7-tel? ~$ [ 5 -ne 7 ]; echo $? #5 nem egyenlő 7-tel? ~$ [ 5 -lt 7 ]; echo $? #5 kevesebb, mint 7? ~$ [ 5 -le 7 ]; echo $? #5 kevesebb, mint 7 vagy egyenlő? ~$ [ 5 -gt 7 ]; echo $? #5 nagyobb, mint 7? ~$ [ 5 -ge 7 ]; echo $? #5 nagyobb, mint 7 vagy egyenlő? ~$ [!5 -eq 7 ]; echo $? #NEM (5 egyenlő 7-tel?); most: 5 nem egyenlő 7-tel? ~$ [ alma =dinnye ]; echo $? #alma az dinnye? (szövegek összehasonlítása) ~$ [ 'alma' = 'dinnye' ]; echo $? #alma az dinnye? (szövegek összehasonlítása) ~$ [ alma!= dinnye ]; echo $? #alma az nem dinnye? (szövegek összehasonlítása) ~$ [ "alma"!= "dinnye" ]; echo $? #alma az nem dinnye? (szövegek összehasonlítása) ~$ [ -n "alma" ]; echo $? #a string hossza nem 0?; van a stringben valami? ~$ [ -z "alma" ]; echo $? #a string hossza 0?; üres a string? ~$ [ 3 -eq 7 -o "fradi"!= "vasas" ] #3 egyenlő 7-tel vagy "fradi" nem egyenlő "vasas"? ~$ [ 3 -eq 7 -a "fradi"!= "vasas" ] #3 egyenlő 7-tel és "fradi" nem egyenlő "vasas"? ~$ mcedit ifhasznal.sh echo "Adjál meg egy számot: "; read szam; if [ $szam -gt 10 ]; then echo "A megatt szám 10-nél nagyobb!"; Elágazások használata1. (if) #bekérek egy számot #beolvasom a számot #elágazás fejrésze a feltétellel (logikai vizsgálattal) együtt #az elágazás igaz ága #az elágazás lábrésze
~$ chmod u+x ifhasznal.sh #futtatási jogot ak magamnak ~$./ifhasznal.sh #futtatom a scriptet Elágazások használata 2. (if ) ~$ mcedit ifhasznal.sh echo "Adjál meg egy számot: "; #bekérek egy számot read szam; #beolvasom a számot if [ $szam -le10 ]; #elágazás fejrésze a feltétellel (logikai vizsgálattal) együtt then echo "A megatt szám 10 vagy annál kisebb!"; #az elágazás igaz ága #az ág fejrésze echo "A megatt szám 10-nél nagyobb!"; #az elágazás hamis ága #az elágazás lábrésze ~$ chmod u+x ifhasznal.sh #futtatási jogot ak magamnak ~$./ifhasznal.sh #futtatom a scriptet Elágazások használata 3. (egymásba ágyazva) ~$ mcedit tobbifhasznal.sh echo "Adjál meg egy számot: "; #bekérek egy számot read x; #beolvasom a számot echo "Adjál meg mégegy számot: "; #bekérek egy számot read y; #beolvasom a számot if [ $x -gt $y ]; #külső elágazás fejrésze then echo "$x nagyobb, mint ${y}!"; #a külső elágazás igaz ága #a külső ág fejrésze if [ $x -eq $y ]; #belső elágazás fejrésze then echo "$x és $y egyenlők!"; #belső elágazás igaz ága #belső elágazás ág fejrésze echo "$x kisebb, mint ${y}!"; #belső elágazás hamis ága #a belső elágazás lábrésze #a külső elágazás lábrésze ~$ chmod u+x tobbifhasznal.sh #futtatási jogot ak magamnak ~$./tobbifhasznal.sh #futtatom a scriptet Elágazások használata 4. (if használata) ~$ mcedit ifhasznal.sh echo "Adjál meg egy számot: "; #bekérek egy számot read x; #beolvasom a számot echo "Adjál meg még egy számot: "; #bekérek egy számot read y; #beolvasom a számot if [ $x -eq $y ]; #az elágazás 1. fejrésze then echo "$x és $y egyenlők!"; #az elágazás 1. ága if [ $x -lt $y ]; #az elágazás 2. fejrésze then echo "$x kisebb, mint ${y}!"; #az elágazás 2. ága #az elágazás fejrésze echo "$x nagyobb, mint ${y}!"; #az elágazás ága (különben ezt csinálja) #az elágazás lábrésze ~$ chmod u+x ifhasznal.sh #futtatási jogot ak magamnak ~$./ifhasznal.sh #futtatom a scriptet
Többirányú elágazások használata (case) ~$ mcedit casehasznal.sh echo "Add meg az alma színét: "; read almaszin; #beolvasom az alma színét case $almaszin in #a többirányú elágazás fejrésze piros) echo "Ez egy piros alma";; #az egyik esett zöld) echo "Ez az alma zöld";; #a másik esett sárga) echo "Ez az alma már majdnem jó";; #egy harmadik esett barna) echo "Ez már nem jó alma";; #negyedik esett *) echo "Ismeretlen alma";; #különben meg ez legyen esac; #a többirányú elágazás lábrésze ~$ chmod u+x casehasznal.sh #futtatási jogot ak magamnak ~$./casehasznal.sh #futtatom a scriptet Iterációs for ciklus használata ~$ mcedit forhasznal1.sh for i in alma körte barack #végigfut az adatlistán és egyesével kiírja őket (külön sorban) echo $i; #itt használom az egyes elemeket ne; echo "A következő felhasználók vannak bejelentkezve:"; for i in `who cut -f1 -d""` #csak felhasználónév; másképp: "for i in $(who cut -f1 -d"")" echo $i; #kiírom egyesével a felhasználóneveket ne; ~$ chmod u+x forhasznal1.sh #futtatási jogot ak magamnak ~$./forhasznal1.sh #futtatom a scriptet Paraméterek használata 2. ~$ mcedit paramhasznal2.sh echo"paraméterek használata"; echo "Adunk összetett paramétert is ('sarga dinnye')"; echo '$* használat'; for i in $* #most kiírok mindent külön echo $i; #alma, barack, sarga, dinnye külön sorban ne echo '"$*" használat for ciklusban'; for i in "$*" echo $i; #eredmény egy sorban; "között" vannak a paraméterek ne echo '"$@" használat'; for i in "$@" #ez akár ennyi is lehetne: "for i" echo $i; #alma, barack, sarga dinnye külön sorban ne
echo "A futó program PID értéke: $$"; echo "A háttérben utoljára végrehajtott program PID-je: $!"; echo "A shell kapcsolói: $-"; ~$ chmod u+x paramhasznal.sh2 #futtatási jogot ak magamnak ~$./paramhasznal.sh2 alma barack 'sarga dinnye' #futtatom a scriptet; a paramétereket megam, van összetett is Számlálós for ciklus használata ~$ mcedit forhasznal2.sh for ((i=1;i<=10;i++)) #for ciklus 1-től 10-ig echo "${i}. futás"; #kiírom 1..10 a számokat ne; ~$ chmod u+x forhasznal2.sh #futtatási jogot ak magamnak ~$./forhasznal2.sh #futtatom a scriptet seq használata ~$ seq 5 #kiírja 1-től 5-ig a számokat külön sorban ~$ seq 3 7 #kiírja 3-tól 7-ig a számokat külön sorban ~$ seq 1 3 10 #kiírja (1-tól 10-ig): 1,4,7,10 (3 a lépésköz) számokat külön sorban Összetett példa (összegző script) ~$ mcedit szumma.sh if [ $# -eq 1 -a "$1" = "-help" ]; #ha a programot -help paraméterrel hívom meg then echo "Ez egy összegző script. A kapott paramétereket összeadja!"; osszeg=0; for i in $* #itt még lehetne egy olyan vizsgálat, hogy mindegyik paraméter szám-e #osszeg=$(expr $osszeg \+ $i); osszeg=`expr $osszeg + $i`; #let osszeg=$osszeg+$i; ne; echo "A megatt paraméterek összege: $osszeg"; ~$ chmod 744 szumma.sh #futtatási jogot ak magamnak ~$./szumma.sh #futtatom a scriptet While ciklus használata 1. ~$ mcedit whilehasznal.sh echo "Adjál meg valamiket! Kilépni VÉGE paranccsal tud!"; sor=""; while [ "$sor"!= " VÉGE" ]; #ha az utolsó utasítás igaz, akkor végrehajtjuk a ciklusmagot echo -n "Adjál meg valamit: "; #ez a ciklusmag read sor; echo "OK"; ne;
~$ chmod u+x whilehasznal.sh #futtatási jogot ak magamnak ~$./whilehasznal.sh #futtatom a scriptet While ciklus használata 2. ~$ mcedit whilehasznal2.sh while #ha az utolsó utasítás igaz, akkor végrehajtjuk a ciklusmagot echo -n "Írd be a neved:"; read nev; #a read nem ad hamis eredményt, csak ha Ctrl+D echo "A Te neved: $nev"; #ez a ciklusmag ne < nevek.txt; #ez arra van, hogy a ciklus a fájlból olvassa a neveket, de a sorvégjeleket is beolvassa, echo ""; #így az utolsó sor üres lesz, ezért kell egy ilyen ~$ chmod u+x whilehasznal2.sh #futtatási jogot ak magamnak ~$./whilehasznal2.sh #futtatom a scriptet While ciklus használata 3. ~$ mcedit whilehasznal3.sh #ha a paraméter fájlnév, akkor kilistázzuk annak tartalmát while [ $#!= 0 ] #van még paraméter? #igen if [ -f $i ] #a paraméter fájlnév? then #igen echo "$1 tartalma:"; #akkor csinálja ezt cat $1; #meg ezt #ha nem fájlnév echo "$1 nem fájl"; #akkor meg emezt #az elágazás vége shift; #paraméterek léptetése balra (az elsőt törli a paramétersorból) echo "Még $# paraméter maradt!"; #a $# értéke a shift hatására mindig változik ne; #a while ciklus vége ~$ chmod u+x whilehasznal3.sh #futtatási jogot ak magamnak ~$./whilehasznal3.sh #futtatom a scriptet Until ciklus használata ~$ mcedit untilhasznal.sh v="igen"; #kezdőérték megadása until [ $v = "nem" ] #az until hamis esetén hajtja végre a ciklusmagot #több utasítás is lhet az until után; ha az utolsó hamis, akkor végrehajtja a ciklusmagot #ciklusmag echo -n "Add meg a neved: "; read nev; echo $nev >> nevek.txt; #ha még nem létezik, akkor létrehozza echo -n "Folytassuk? (igen/nem): "; #ez dönt arról, hogy mikor lépünk ki a ciklusból read v; #csak akkor ha a v="nem" ne; ~$ chmod u+x untilhasznal.sh #futtatási jogot ak magamnak ~$./untilhasznal.sh #futtatom a scriptet
Függvények definiálása, használata ~$ mcedit fugghasznal.sh szia() { #C stílusú függvény echo "Szia $1!"; #paramétereit a shell scripthez hasonlóan lgozza fel } hello() { #a függvény nem foglalkozik a paramétereivel szia Papa; #az egyik függvény hívhatja a másikat } fakt() { if [ $1 -le 1 ]; then echo 1; #általában return parancsot használunk, de most az echo egyszerűbb volt let y=$1-1; let eredmeny=$(fakt $y)*$1; #a függvény akár önmagát is hívhatja echo $eredmeny; } hello Mama; #függvényhívás echo "Az 5 faktoriálisa: $(fakt 5)"; #paramétereket nem jelölhetünk ~$ chmod u+x fugghasznal.sh #futtatási jogot ak magamnak ~$./fugghasznal.sh #futtatom a scriptet sh használata ~$ mcedit shhasznal.sh echo "Ez az elágazás előtti sor!"; if [ 5 -eq 4 ]; then echo "Igaz ág!"; echo "Hamis ág!"; echo "Ez az elágazás utáni sor!"; ~$ sh shhasznal.sh #ha nincs futási jog, akkor is futtatja a scriptet ~$ sh -v shhasznal.sh #kiírja a forráskót váltogatva a végrehajtással ~$ sh -x shhasznal.sh #kiírja a forráskódnak azt a részét, amit érint a végrehajtáskor váltakozva Összetett példa 1. (for, case, karaktervizsgálat) ~$ mcedit osszpelda1.sh for i #a paramétereket végigjárom case $i in #többirányú elágazás; mivel kezdődik a paraméter? [A-Z]*) F=" $F $i";; #ha NAGY betűvel, akkor a $F-hez fűzöm hozzá [a-z]*) f="$f $i";; #ha kis betűvel, akkor a $f-hez fűzöm hozzá [0-9]*) break;; #ha számmal, akkor kilép (kitör) a ciklusból esac; ne; echo $F; #kiírja a NAGY betűvel kezdődő paramétereket; kimenet: "KORTE Barack" echo $f; #kiírja a kis betűvel kezdődő paramétereket; kimenet: "alma" ~$ sh osszpelda1.sh alma KORTE Barack 4 dinnye #ha nincs futási jog, akkor is futtatja a scriptet
line parancs használata ~$ sor=`line`; echo $sor #így olvashatok be egy sort a line paranccsal és ki is írom azt ~$ tovább #tovább ~$ tovább #tovább sed parancs használata awk parancs használata tovább 6.előadás Az előadáson még elhangzott chown, chgrp, umask, mail, telnet(ssh), ftp, nfs(mount) #arpanet talk/write, mesg no, finger user mc #egy fájlkezelő a linuxban read p read t 3 #ennyi (3) másodpercig várunk read n 5 #maximum ennyi (5) karaktert olvasunk be echo 2*16 bc #bc parancs; 32; bcpelda.sh exit ertek #(0-255); mint a c++ exit parancsa, de itt a 0 a sikeres, a többi a sikertelen bash: SELECT continue; exit; parancsok a ciklusban függvény return parancs #függvény visszatérési értéket a return utasítással adhatunk meg expr STRING:REGEXP #mintaillesztés http://linuxcommand.org/writing_shell_scripts.php