Csatlakozás a pandora.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 tulajdonságaival ls –a #könyvtár tartalom listázása a rejtett fájlo kkal együtt ls –al #könyvtártartalom listázása a rejtett fájlokkal együtt részletes tulajdonsá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.t xt nevű fájlt a Teszt mappából (benne vagyok) a Keksz mappába cp ../Keksz/teszt.t xt ujneven.txt #átmásolja a teszt.t xt nevű fájlt Kekszből Tesztbe új néven cp –v ujneven.txt ../ #átmásolja az u jneven.txt nevű fájlt Tesztből Masodikba visszajelzéssel rm: rm teszt.t xt #törlöm a teszt.t xt fájlt a Teszt mappából rm –v ../ Keks z/teszt.txt #törlöm a teszt.t xt fájlt a Keksz mappából visszajelzéssel
mv : mv u jneven.txt Keksz mv –v Keksz/ujneven.t xt .
#áthelyezem az ujneven.t xt fájlt a Masodik mappából Keksz mappába #áthelyezem az ujneven.t xt 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.t xt fájljához passwd: passwd #INF jelszó módosí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ővallu mon 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 megadott formában cat: cat >teszt.t xt #ha nincs teszt.txt akkor létrehozo m, kü lönben felülíro m Első #beleírok pár sort Második Harmad ik Ctrl + D #kilépek a sorok írásából cat teszt.txt #kiíro m a teszt.t xt tartalmát cat >> teszt.t xt #hozzáfű zök a teszt.t xt-hez, ha n incs ilyen néven akkor létreho zza 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.t xt szövegfájl első 3 sorát head –c 30 teszt.t xt #kiírja a teszt.t xt első 30 byte-át tail: tail –n 4 teszt.t xt #kiírja a teszt.t xt utolsó 4 sorát tail –c 20 teszt.t xt #kiírja a teszt.t xt utolsó 20 byte-át more: more teszt.t xt #kiírja a fájl tartalmát, soronként lehet lefele lép kedni, felfele nem léphetek q #kiléphetek menetközben q-val, vagy akár végiglépkedhetek ENTER-rel less: less teszt.t xt #kiírja a fájl tartalmát, soronként fel-le lehet lépkedni q #kilépni csak q-val tudok tar: tar –cvf proba.tar *.t xt #létrehozok egy tar fájlt, amibe csak a .t xt fájlo kat rako m bele a mappából tar –cvf ujproba.tar teszt.t xt #létrehozok egy tar fájlt, amibe csak a teszt.t xt fájlt rako m bele a mappából tar – xvf u jproba.tar * #kicsomagolo m az ujproba.tar fájlt zip: zip proba.zip *.t xt #proba.zip-be tö mörítem a .t xt fájlokat unzip: unzip proba.zip teszt.t xt #teszt.t xt fájl kicso magolása a proba.zip fájlból gzip : gzip –v teszt.t xt #teszt.t xt fájl becsomagolása gunzip: gunzip –v teszt.txt .gz #teszt.t xt fájlt kicsomagolása
diff: diff teszt.t xt masik.t xt
#összehasonlítja a két fájlt, hol különbözik egymástól
find –size 1k find –size -10k find –perm 644 find –name *.t xt find –name *.t xt –size 1k –perm 644
#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ájlo k keresése #.txt fájlo k keresése az adott mappában, az adott szinten #az elő ző dolgok együtt
find:
grep: grep odik teszt.t xt grep sor teszt.t xt masik.t xt grep –r ’dik’ ./Teszt grep –r –l sor * chmod:
#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ájlo kban) #az összes állo mányban keresi a sor szót, ered ménybe csak a fájl nevét adja
chmod 777 masik.t xt #minden jogosultságot megadok a fájlnak (én, csoport, mások | r + w + x) chmod o-x-w masik.t xt #a más felhasználóktól elveszem a futtatási és írási jogot chmod –v g+w teszt.t xt #a csoportomban lévő felhasználó knak adok írási jogot, és visszajelzést várok sleep: sleep 10 #10 másodperc alvás, vagyis 10 másodpercig semmit nem lehet csináln i sleep 240 & #4 perc alvás a háttérben, közben lehet dolgozni 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 fo lyamat prioritás i 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 fo lyamat 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 dolgozik (kilépés Ctrl + Z) jobs #kiírja az éppen dolgozó programokat fg: fg %1 #előtérbe hozza az 1-es job azonosítóval (megnézn i jobs-sal) rendelkező fo lyamatot 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 p roces azonosítóval (megnézn i ps-sel) rendelkező fo lyamatot áttovábbítás: tail –n 7 teszt.t xt >> masik.t xt #a text.t xt utolsó 7 sorát hozzáfű zi a masik.t xt fájlhoz változók használata: $a = ELTE #egy változónak értéket adok 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.t xt ~$ head –n 10 temp.t xt > date.t xt man date | head –n 10 > date.t xt ~$ rm temp.t xt ~$ cat /proc/cpuinfo | grep yes > yes.t xt ~$ echo alma barack szilva > gyu molcs.t xt #a gyumolcs.t xt-ben egy sor lesz, ami "alma barack szilva"
Rendezés ~$ who|sort ~$ ls –la| sort
#rendezi a belépet felhasználó kat abc sorrendbe #rendezi a fájlo kat jogosultság szerint (abc sorrendbe), mivel azzal kezdődik a sor
Az első script írása ~$ mcedit #! /bin/bash #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 ~$ ch mod u+x elsoscript.sh #futtatási jogot adok magamnak, másképp: ch mod 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! A z aktuális dátum és idő:"; date +%Y-%m-%d_%H:%M:%S #a dátum kiírása megadott formában (F2 [.profile ]) #elmentem elsoscript.sh néven (F10) #kilépek az mcedit szövegszerkesztőből ~$ ch mod u+x elsoscript.sh #futtatási jogot adok magamnak, másképp: ch mod 744 fajlnev ~$ ./elsoscript.sh #futtatom a scriptet
Aliasok használata ~$ alias lla="ls -al" ~$ lla ~$ unalias lla ~$ alias
#létrehozás #használata #törlés #aliasok lekérdezése
Környezeti változók ~$ env ~$ echo $USER
#környezeti változók lekérdezése #a USER környezet i válto zó kiírása
Futtatható fájlokat keresendő mappák (PATH) ~$ expo rt PATH=$PATH:./ #hozzáadom az aktuális mappát ~$ expo rt PATH=$PATH:/afs/inf.elte.hu/user/g/gr/grofftamas/szamalap / #így már az adott mappában lévő scripteket már fájlnevekkel tudom futtatni
Globális változók ~$ set ~$ expo rt alma="körte" ~$ unset alma
#a globális változók kiírása #saját változó létrehozása #törlés
Lokális változók ~$ a = frad i; ~$ echo "hajrá $a !" ~$ fa = virág; ~$ echo "alma\$fa"; ~$ echo "alma$fa";
#hajrá fradi ! #alma$fa #almavirág
\,', " és {} használata ~$ szeretem="utálo m" ~$ echo A tökfő zeléket $szeretem ~$ echo A tökfő zeléket \$szeretem ~$ echo 'A tökfőzeléket $szeretem' ~$ echo "A tökfőzeléket $szeretem" ~$ t ipus=mobil ~$ echo $t ipustelefon ~$ echo ${tipus}telefon ~$ a=mobil ~$ b=telefon ~$ echo ab ~$ echo $ab ~$ echo $a$b ~$ echo ${ab} ~$ echo ${a}${b} ~$ echo '\"' ~$ echo "$a$b" ~$ echo '$a'
#lokális változó létrehozása #kimenet: "A tökfőzeléket utálo m" #kimenet: "A tökfőzeléket $szeretem" #Az 'között' letilt minden különleges karaktert; kimenet: "A tökfőzeléket $szeretem" #ez egy ajánlott módszer; kimenet: "A tökfő zeléket utálo m" #egy lokális változó lét rehozása #egybe akarom kiírni, de ez nem jó megoldás; kimenet: "" #kimenet: " mobiltelefon" #lokális változó #lokális változó #kimenet: "ab" #kimenet: "" #kimenet: " mobiltelefon" #kimenet: "" #kimenet: " mobiltelefon" #kimenet: "\"" #kimenet: " mobiltelefon" #kimenet: "$a"
A read parancs használata ~$ mcedit hasznalread.sh #!/bin/bash rendezo="Tarantino"; film="Django"; echo "$rendezo filmje a $film"; echo "Adj meg egy Tarantino film címet: "; read -s film; echo "$rendezo filmje a $film?"; (F2), (F10) ~$ ch mod u+x hasznalread.sh ~$ ./hasznalread.sh
#lokális változó létrehozása #egy másik lo kális változó #kimenet: "Tarantino filmje a Django" #beolvasok egy filmcímet, de t itkosítva úgy, mint a jelszót #kiíro m a beolvasott adatot egy szöveggel #elmentés és kilépés #futtatási jogot adok magamnak, másképp: ch mod 744 fajlnev #futtatom a scriptet
Parancs behelyettesítés ~$ 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";
datum=`date +%Y-%m-%d_%H:%M:%S`; echo "Mai dátum: $datum"; ki_vagy=`whoami`; echo "Te valójában $ki_vagy vagy!"; mostdatum="date"; eval $mostdatum; (F2), (F10) ~$ ch mod u+x udvozlo.sh ~$ ./udvozlo.sh
#így adom meg, hogy ez nem egy sima szöveg, hanem parancs #így itt végrehajtja a parancsot és az ered ményt írja a $datum helyére #megadom a parancsot #parancsbehelyettesítés a szövegkörnyezetbe #most sima stringként adtam meg a parancsot #az eval parancs parancsként értelmezi a $mostdatum tartalmát #elmentés és kilépés #futtatási jogot adok magamnak, másképp: ch mod 744 fajlnev #futtatom a scriptet
Read, parancs behelyettesítés és manual ~$ mcedit manparancs.sh #!/bin/bash echo"Adj meg egy parancsot: "; read parancs; man $parancs; $parancs; echo "Köszönöm, hogy megadtad a $parancs parancsot!"; (F2), (F10) ~$ ch mod u+x manparancs.sh ~$ ./ manparancs.sh
#bekérek egy parancsot #például: who #futtatom a parancs manualját #végrehajtom a parancsot #kiíro m a parancsot (vagyis a nevét szövegként) #elmentés és kilépés #futtatási jogot adok magamnak #futtatom a scriptet
Paraméterek használata 1. ~$ mcedit paramhasznal.sh #!/bin/bash echo -n "Parancs neve:"; echo $0; echo -n "Első paraméter:"; echo $1; echo "Második paraméter:$2"; #echo "A tízedik paraméter:${10}"; echo -n "Paraméterek s záma:"; echo $#; echo -n "Összes paraméter - stringként:"; echo $*; echo -n "Összes paraméter - string sorozatként:"; echo $@; (F2), (F10) ~$ ch mod u+x paramhasznal.sh ~$ ./paramhasznal.sh alma barack d innye
#kiíro m a parancs (vagyis a script nevét) #kimenet: "./paramhasznal.sh" #a -n kapcsolóval sortörés nélkül írhatunk ki #kimenet: "alma" #akár így is írhatom ő ket; kimenet: "barack" #10-tő l már így kell írno m #kimenet: "3" "kimenet: "alma barack dinnye" #kimenet: "alma barack d innye" #elmentés és kilépés #futtatási jogot adok magamnak #futtatom a scriptet; a paramétereket megadom
Bonyolult feladat Írj egy olyan scriptet, amely az első paraméterben megadott parancsot végrehajtja és a kimenetét a második paraméterbe továbbítja! ~$ mcedit atiranyit.sh #!/bin/bash $1 > $2; #$1 végrehajt ja a parancsot, a > áttovábbítja a $2-nek (F2), (F10) #elmentés és kilépés ~$ ch mod u+x atiranyit.sh #futtatási jogot adok magamnak ~$ ./atiranyit.sh #futtatom a scriptet Feladat:
cut használata #2. mezőt kivágo m a szó köz elválasztó karakterrel (egy mező egy szó); kimenet: "b" #a 2. és 4. karakter kivágása; kimenet: "bd"; alapértelmezett mezőelválasztó a TAB #2. mezőt kivágo m; kimenet: "cd"
~$ echo "a b cd" | cut -f2 -d "" ~$ echo "abcdef" | cut -c 2,4 ~$ echo "ab cd ef" | cut -d'' -f2
Feladat: Ábécé sorrendben mentsük ki a felhasználóneveket a felhasznalo k.t xt fájlba az /etc/passwd fájlból ~$ cat /etc/passwd | cut -f1 -d ":" | sort >> felhasznalo k.t xt #az /etc/passwd fájl első mezőjét (ami a :-tal van elválasztva) ábécé sorrendbe rendezem és a felhasznalok.t xt-be mentem Feladat: Olvassunk be egy karaktersorozatot (x=nev&y=jelszo) és bontsuk fel, aztán írjuk ki egy .ht ml fájlba ~$ mcedit cuthasznal.sh #! /bin/bash read alma; # x=gyurika&y=d ikkma #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 ''> gyurkaweb.ht ml; #létrehozok egy gyurkaweb.html fájlt echo '
GyurkaW EB'>> gyurkaweb.ht ml; #és ebbe fűzőgetek sorokat echo ''>> gyurkaweb.ht ml; bekezdes="
Azonosítója: ${login}, jelszava: ${password}!
"; #felhasználo m a felhasz.nevet és jels zót echo $bekezdes >> gyurkaweb.ht ml; echo ''>> gyurkaweb.html; echo ''>> gyurkaweb.html; (F2), (F10) #elmentés és kilépés ~$ ch mod 744 cuthasznal.sh #futtatási jogot adok magamnak ~$ ./cuthasznal.sh #futtatom a scriptet
tee használata ~$ ls -l | tee file.t xt | less
#létrehozás
sort használata ~$ cat szamo k.t xt ~$ cat szamo k.t xt ~$ cat szamo k.t xt ~$ cat szamo k.t xt
| sort | sort –r | sort –u | sort –b –u
#rendezem a számo kat #fordított sorrendbe rendezem a számo kat #rendezem a számo kat és az egyformákat csak egyszer íro m ki #az elején lévő szóközö ket elhagyom és rendezem a s zámokat egyedileg
uniq használata ~$ cat szamo k.t xt | sort | uniq
#szamok.t xt-ben lévő számokat rendezem és egyedisítem (mindegyik csak egyszer lesz)
wc használata ~$ who | wc ~$ who | wc -l ~$ who | wc -w ~$ who | wc -c
#a who ered ményének sor, szavak száma és bájt értékének kiírása #a who sor számának kiírása (hány sort ad eredményül); a sorvégi entereket számo lja #a who ered mény szavak számát adja #a who ered mény karakterek számát adja
grep használata ~$ cat vers.t xt | grep -i szív ~$ cat vers.t xt | grep -c szív ~$ cat vers.t xt | grep -n szív ~$ cat vers.t xt | grep -v szív ~$ cat vers.t xt | grep -w szív ~$ grep -r 'alma' ./versek ~$ grep -r -l 'alma' ./versek ~$ cat vers.t xt | grep -w -v -c szív ~$ cat vers.t xt | grep -w -v -n s zív
#"szív" karakterrészt tartalmazó sorok, ahol nem különbözteti meg a kis -NA GY betűket #"szív" karakterrészt tartalmazó sorok száma #"szív" karakterrészt tartalmazó sorok a sorindexekkel együtt #"szív" karakterrészt nem tartalmazó sorok #"szív" szót tartalmazó sorok #a versek könyvtárban (mappában) az alma -s sorokat (fájlokban) keresi #a versek könyvtárban (mappában) az alma -s sorokat tartalmazó fájlo k nevét írja ki #"szív" szót nem tartalmazó sorok száma #"szív" szót nem tartalmazó sorok a sorindexekkel együtt
~$ env | grep LA ~$ env | grep ^LA ~$ cat vers.t xt | grep hoz$ ~$ cat vers.t xt | grep k.r.k ~$ cat vers.t xt | grep ^a.*fa$
#"LA" karakterrész keresése az env fájlban #"LA" karakterrésszel kezdődő szavak keresése #"hoz" karakterrésszel vég ződő szavak keresése #"k?r?k" karakterrész keresése, ahol a . egy tetszőleges karakter (kerek,kerék,kérek,stb.) #"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
karakterhalmazo k megadása: [..] [a-z] (kisbetű) [^a-c] (nem a,b vagy c karakter) [A-Za-z0-9] (alfanu merikus: szám vagy betű) [0-9] (s zámjegy) speciális kapcsolókkal \w (alfanu merikus) \W (nem alfanu merikus) \d (számjegy) \s (szóköz, TAB, sortörés) szavak illesztése \< szókezdet (pl. grep "\
szóvég (pl. g rep "tán\>" EGrep féle kapcsolók | (p l.: ls | egrep "par|pelda" #par vagy pelda karakterrészt tartalmazó sorok (fájlok) keresése) + (p l.: ls | egrep "\
Összetett szűrő parancsok ~$ getent passwd | tee felhasznalok.t xt | wc -l ~$ cat felhasznalo k.t xt | cut -f5 -d ":" ~$ cat felhasznalo k.t xt | cut -f1 -d ":" | sort | head -n 10
#passwd fájlban lévő sorokat lementem és a sorok számát kapo m #a felhasznalok.t xt-ből az 5. mező ket vágom ki #a who ered mény szavak számát adja
Sikeres parancs volt-e? ~$ cat >van_ilyen.t xt Első Második Harmad ik Ctrl + D ~$ cat nincs_ilyen.t xt ~$ echo $? ~$ cat van_ilyen.t xt ~$ echo $?
#létrehozok egy van_ilyen.t xt fájlt #beleírok pár sort #kilépek a sorok írásából #kiakarok írni egy olyan fájlt, ami nem létezik #sikerült-e a művelet?; most az ered mény 1, vagyis nem #kiíro m a korábban létrehozott fájlt #sikerült-e a művelet?; most az ered mény 0, vagyis igen
test parancs használata ~$ test -e nincs_ilyen.t xt; echo $? ~$ test -d ujmappa; echo $? ~$ test -s van_ilyen.txt; echo $? ~$ test -r van_ilyen.t xt; echo $? ~$ test -w van_ilyen.t xt; echo $? ~$ test -x van_ilyen.t xt; echo $?
#létezik-e a fájl? #mappa-e? #van benne valami adat? #olvashatom? #írhatom? #futtathatom?
Aritmetikai műveletek shellben ~$ x="piros" ~$ echo "Nyári $x alma!" ~$ y=$x+fa; echo $y ~$ a=5; b =$a+1; echo $b ~$ a=2; let b=$a+1; echo $b ~$ exp r 2 \+ 1 ~$ let x=3*4; echo $x ~$ exp r 3 \* 4 ~$ let x=3-4; echo $x ~$ exp r 3 \- 4 ~$ let x=10/ 4; echo $x ~$ exp r 10 \/ 4 ~$ let x=10%3; echo $x ~$ exp r 10 \% 3
#létrehozok egy lokális változót #szöveg összefűzés művelete; kimenet: "Nyári piros alma!" #azt akaro m, hogy fűzze össze a + jel segítségével, nem lehet; kimenet: "piros+fa" #a számo kkal se működ ik, mert a shellben minden szöveg; kimenet: "5+1" #az összeadás művelete a let parancs segítségével; kimenet: "3" #az összeadás művelete az exp r parancs segítségével; kimenet: "3" #a szorzás művelete a let parancs segítségével; kimenet: "12" #a szorzás művelete az exp r parancs segítségével; kimenet: "12" #a kivonás művelete a let parancs segítségével; kimenet: "-1" #a kivonás művelete az exp r parancs segítségével; kimenet: "-1" #az osztás művelete (egész kép zés) a let parancs segítségével; kimenet: "2" #az osztás művelete (egész kép zés) az expr parancs segítségével; kimenet: "2" #a maradékképzés művelete a let parancs segítségével; kimenet: "1" #a maradékképzés művelete az exp r parancs segítségével; kimenet: "1"
~$ exp r 3 \< 7 ~$ exp r 3 \<= 7 ~$ exp r 3 \> 7 ~$ exp r 3 \>= 7 ~$ exp r 3 \= 7 ~$ exp r 3 \!= 7 ~$ [ 5 -eq 7 ]; echo $? ~$ [ 5 -ne 7 ]; echo $? ~$ [ 5 -lt 7 ]; echo $? ~$ [ 5 -le 7 ]; echo $? ~$ [ 5 -gt 7 ]; echo $? ~$ [ 5 -ge 7 ]; echo $? ~$ [ !5 -eq 7 ]; echo $? ~$ [ alma =dinnye ]; echo $? ~$ [ 'alma' = 'd innye' ]; echo $? ~$ [ alma != dinnye ]; echo $? ~$ [ "alma" != "dinnye" ]; echo $? ~$ [ -n "alma" ]; echo $? ~$ [ -z "alma" ]; echo $? ~$ [ 3 -eq 7 -o "fradi" != "vasas" ] ~$ [ 3 -eq 7 -a "frad i" != "vasas" ]
#3 kisebb, mint 7? #3 kisebb, mint 7 vagy egyenlő? #3 nagyobb, mint 7? #3 nagyobb, mint 7 vagy egyenlő? #3 egyenlő 7-tel? #3 nem egyenlő 7-tel? #5 egyenlő 7-tel? #5 nem egyenlő 7-tel? #5 kevesebb, mint 7? #5 kevesebb, mint 7 vagy egyenlő? #5 nagyobb, mint 7? #5 nagyobb, mint 7 vagy egyenlő? #NEM (5 egyenlő 7-tel?); most: 5 nem egyenlő 7-tel? #alma az dinnye? (szövegek összehasonlítása) #alma az dinnye? (szövegek összehasonlítása) #alma az nem d innye? (szövegek összehasonlítása) #alma az nem d innye? (szövegek összehasonlítása) #a string hossza nem 0?; van a stringben valami? #a string hossza 0?; üres a string? #3 egyenlő 7-tel vagy "fradi" nem egyenlő "vasas"? #3 egyenlő 7-tel és "fradi" nem egyenlő "vasas"?
Logikai vizsgálatok
Elágazások használata1. (if) ~$ mcedit ifhasznal.sh #! /bin/bash echo "Adjál meg egy számot: "; read szam; if [ $szam -gt 10 ]; then echo "A megadott szám 10-nél nagyobb!"; fi; (F2), (F10)
#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 #elmentés és kilépés
~$ ch mod u+x ifhasznal.sh ~$ ./ifhasznal.sh
#futtatási jogot adok magamnak #futtatom a scriptet
Elágazások használata 2. (if … else …) ~$ mcedit ifelsehasznal.sh #! /bin/bash 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 megadott szám 10 vagy annál kisebb!"; #az elágazás igaz ága else #az else ág fejrésze echo "A megadott szám 10-nél nagyobb!"; #az elágazás hamis ága fi; #az elágazás lábrésze (F2), (F10) #elmentés és kilépés ~$ ch mod u+x ifelsehasznal.sh #futtatási jogot adok magamnak ~$ ./ifelsehasznal.sh #futtatom a scriptet
Elágazások használata 3. (egymásba ágyazva) ~$ mcedit tobbifhasznal.sh #! /bin/bash echo "Adjál meg egy számot: "; read x; echo "Adjál meg mégegy számot: "; read y; if [ $x -gt $y ]; then echo "$x nagyobb, mint ${y}!"; else if [ $x -eq $y ]; then echo "$x és $y egyenlők!"; else echo "$x kisebb, mint ${y}!"; fi; fi; (F2), (F10) ~$ ch mod u+x tobbifhasznal.sh ~$ ./tobbifhasznal.sh
#bekérek egy számot #beolvasom a számot #bekérek egy számot #beolvasom a számot #külső elágazás fejrésze #a külső elágazás igaz ága #a külső else ág fejrésze #belső elágazás fejrésze #belső elágazás igaz ága #belső elágazás else ág fejrésze #belső elágazás hamis ága #a belső elágazás lábrésze #a külső elágazás lábrésze #elmentés és kilépés #futtatási jogot adok magamnak #futtatom a scriptet
Elágazások használata 4. (elseif használata) ~$ mcedit elseifhasznal.sh #! /bin/bash echo "Adjál meg egy számot: "; read x; echo "Adjál meg még egy számot: "; read y; if [ $x -eq $y ]; then echo "$x és $y egyenlők!"; elseif [ $x -lt $y ]; then echo "$x kisebb, mint ${y}!"; else echo "$x nagyobb, mint ${y}!"; fi; (F2), (F10) ~$ ch mod u+x elseifhasznal.sh ~$ ./elseifhasznal.sh
#bekérek egy számot #beolvasom a számot #bekérek egy számot #beolvasom a számot #az elágazás 1. fejrésze #az elágazás 1. ága #az elágazás 2. fejrésze #az elágazás 2. ága #az elágazás else fejrésze #az elágazás else ága (kü lönben ezt csinálja) #az elágazás lábrésze #elmentés és kilépés #futtatási jogot adok magamnak #futtatom a scriptet
Többirányú elágazások használata (case) ~$ mcedit casehasznal.sh #! /bin/bash echo "Add meg az alma színét: "; read almaszin; case $almaszin in piros) echo "Ez egy piros alma";; zöld) echo "Ez az alma zö ld";; sárga) echo "Ez az alma már majdnem jó";; barna) echo "Ez már nem jó alma";; *) echo "Ismeretlen alma";; esac; (F2), (F10) ~$ ch mod u+x casehasznal.sh ~$ ./casehasznal.sh
#beolvasom az alma színét #a többirányú elágazás fejrésze #az egyik esett #a másik esett #egy harmadik esett #negyedik esett #különben meg ez legyen #a többirányú elágazás lábrésze #elmentés és kilépés #futtatási jogot adok magamnak #futtatom a scriptet
Iterációs for ciklus használata ~$ mcedit forhasznal1.sh #! /bin/bash for i in alma körte barack do echo $i; done; echo "A következő felhasználók vannak bejelentkezve:"; for i in `who | cut -f1 -d""` do echo $i; done; (F2), (F10) ~$ ch mod u+x forhasznal1.sh ~$ ./forhasznal1.sh
#végigfut az adatlistán és egyesével kiírja őket (kü lön sorban) #itt használom az egyes elemeket
#csak felhasználónév; másképp: "for i in $(who|cut -f1 -d"")" #kiíro m egyesével a felhasználóneveket #elmentés és kilépés #futtatási jogot adok magamnak #futtatom a scriptet
Paraméterek használata 2. ~$ mcedit paramhasznal2.sh #! /bin/bash echo"Paraméterek használata"; echo "Adunk összetett paramétert is ('sarga dinnye')"; echo '$* használat'; for i in $* do echo $i; done echo '"$*" használat for ciklusban'; for i in "$*" do echo $i; done echo '"$@" használat'; for i in "$@" do echo $i; done
#most kiíro k mindent külön #alma, barack, sarga, d innye külön sorban
#eredmény egy sorban; "között" vannak a paraméterek
#ez akár ennyi is lehetne: "for i" #alma, barack, sarga dinnye kü lön sorban
echo "A futó program PID értéke: $$"; echo "A háttérben utoljára végrehajtott program PID-je: $!"; echo "A shell kapcsolói: $-"; (F2), (F10) #elmentés és kilépés ~$ ch mod u+x paramhasznal.sh2 #futtatási jogot adok magamnak ~$ ./paramhasznal.sh2 alma barack 'sarga dinnye' #futtatom a scriptet; a paramétereket megadom, van összetett is
Számlálós for ciklus használata ~$ mcedit forhasznal2.sh #! /bin/bash for ((i=1;i<=10; i++)) do echo "${i}. futás"; done; (F2), (F10) ~$ ch mod u+x forhasznal2.sh ~$ ./forhasznal2.sh
#for ciklus 1-től 10-ig #kiíro m 1..10 a számo kat #elmentés és kilépés #futtatási jogot adok magamnak #futtatom a scriptet
seq használata ~$ seq 5 ~$ seq 3 7 ~$ seq 1 3 10
#kiírja 1-től 5-ig a számo kat kü lön sorban #kiírja 3-tól 7-ig a számo kat kü lön sorban #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 szu mma.sh #! /bin/bash 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!"; else osszeg=0; for i in $* #itt még lehetne egy olyan vizsgálat, hogy mindegyik paraméter szám-e do #osszeg=$(exp r $osszeg \+ $i); osszeg=`expr $osszeg + $i`; #let osszeg=$osszeg+$i; done; echo "A megadott paraméterek összege: $osszeg"; fi; (F2), (F10) #elmentés és kilépés ~$ ch mod 744 szu mma.sh #futtatási jogot adok magamnak ~$ ./szumma.sh #futtatom a scriptet
While ciklus használata 1. ~$ mcedit wh ilehasznal.sh #! /bin/bash 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 do echo -n "Adjál meg valamit: "; #ez a ciklusmag read sor; echo "OK"; done;
(F2), (F10) ~$ ch mod u+x whilehasznal.sh ~$ ./whilehasznal.sh
#elmentés és kilépés #futtatási jogot adok magamnak #futtatom a scriptet
While ciklus használata 2. ~$ mcedit wh ilehasznal2.sh #! /bin/bash while echo -n "Írd be a neved:"; read nev; do echo "A Te neved: $nev"; done < nevek.t xt; echo ""; (F2), (F10) ~$ ch mod u+x whilehasznal2.sh ~$ ./whilehasznal2.sh
#ha az utolsó utasítás igaz, akkor végrehajtjuk a ciklusmagot #a read nem ad hamis ered ményt, csak ha Ct rl+D #ez a ciklusmag #ez arra van, hogy a ciklus a fájlból olvassa a neveket, de a sorvégjeleket is beolvassa, #így az utolsó sor üres lesz, ezért kell egy ilyen #elmentés és kilépés #futtatási jogot adok magamnak #futtatom a scriptet
While ciklus használata 3. ~$ mcedit wh ilehasznal3.sh #! /bin/bash #ha a paraméter fájlnév, akko r kilistázzu k annak tartalmát while [ $# != 0 ] do if [ -f $i ] then echo "$1 tartalma:"; cat $1; else echo "$1 nem fájl"; fi; shift; echo "Még $# paraméter maradt!"; done; (F2), (F10) ~$ ch mod u+x whilehasznal3.sh ~$ ./whilehasznal3.sh
#van még paraméter? #igen #a paraméter fájlnév? #igen #akkor csinálja ezt #meg ezt #ha nem fájlnév #akkor meg emezt #az elágazás vége #paraméterek léptetése balra (az elsőt törli a paramétersorból) #a $# értéke a shift hatására mindig válto zik #a while ciklus vége #elmentés és kilépés #futtatási jogot adok magamnak #futtatom a scriptet
Until ciklus használata ~$ mcedit untilhasznal.sh #! /bin/bash 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, akko r végrehajtja a ciklusmagot do #ciklusmag echo -n "Add meg a neved: "; read nev; echo $nev >> nevek.t xt; #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" done; (F2), (F10) #elmentés és kilépés ~$ ch mod u+x untilhasznal.sh #futtatási jogot adok magamnak ~$ ./untilhasznal.sh #futtatom a scriptet
Függvények definiálása, használata ~$ mcedit fugghasznal.sh #! /bin/bash szia() { echo "Szia $1!"; } hello() { szia Papa; } fakt() { if [ $1 -le 1 ]; then echo 1; else let y=$1-1; let ered meny=$(fakt $y)*$1; echo $ered meny; fi; } hello Mama; echo "Az 5 faktoriálisa: $(fakt 5)"; (F2), (F10) ~$ ch mod u+x fugghasznal.sh ~$ ./fugghasznal.sh
#C stílusú függvény #paramétereit a shell scripthez hasonlóan dolgozza fel #a függvény nem foglalkozik a paramétereivel #az egyik függvény hívhatja a másikat
#általában return parancsot használunk, de most az echo egyszerűbb volt
#a függvény akár ön magát is hívhatja
#függvényhívás #paramétereket nem jelö lhetünk #elmentés és kilépés #futtatási jogot adok magamnak #futtatom a scriptet
sh használata ~$ mcedit shhasznal.sh #! /bin/bash echo "Ez az elágazás előtti sor!"; if [ 5 -eq 4 ]; then echo "Igaz ág!"; else echo "Hamis ág!"; fi; echo "Ez az elágazás utáni sor!"; (F2), (F10) ~$ sh shhasznal.sh ~$ sh -v shhasznal.sh ~$ sh -x shhasznal.sh
#elmentés és kilépés #ha nincs futási jog, akkor is futtatja a scriptet #kiírja a forráskódot váltogatva a végrehajtással #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 #! /bin/bash for i #a paramétereket végigjáro m do 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; done; echo $F; #kiírja a NA GY betűvel kezdődő paramétereket; kimenet: "KORTE Barack" echo $f; #kiírja a kis betűvel kezdődő paramétereket; kimenet: "alma" (F2), (F10) #elmentés és kilépés ~$ 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 íro m azt
sed parancs használata ~$ tovább
#tovább
awk parancs használata ~$ tovább
#tovább
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 linu xban read –p read –t 3 #ennyi (3) másodpercig várunk read –n 5 # maximu m 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://linuxco mmand.org/writing_shell_scripts.php