1 / 37

Scriptelés alapok

Intelligens rendszerfelügyelet. Scriptelés alapok. Tóth Dániel Micskei Zoltán. Tartalom. Műveletek automatizálása, scriptelés Eltérések az általános programozási nyelvekhez képest Linux alatt Bash Windows PowerShell. Shell scriptelés. Általában a script nyelvek jellegzetességei

tierra
Télécharger la présentation

Scriptelés alapok

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Intelligens rendszerfelügyelet Scriptelés alapok Tóth Dániel Micskei Zoltán

  2. Tartalom • Műveletek automatizálása, scriptelés • Eltérések az általános programozási nyelvekhez képest • Linux alatt Bash • Windows PowerShell

  3. Shell scriptelés • Általában a script nyelvek jellegzetességei • Típustalan változókezelés • Interpreter futtatja • Akár soronként is értelmezhető • Minden futási időben értékelődik ki • String paramétert is képes értelmezni parancsként • Erősen eltér az eddig látott programnyelvektől (C, C++, Java, C#)

  4. Bash • Bash (Bourne Again Shell) • 1987-óta fejlesztik • Elődje az alap UNIX-osBourneshell (sh) 1978-ból • Nem mai programozási szemléletmódot követ • Működési elv (nagyvonalakban): • Soronként elemzi a bemenetet • Azonosítja a saját fenntartott szintaxis elemeit • Stringként mindent behelyettesít, amíg csak lehet • Ami utána marad, azt megpróbálja végrehajtani

  5. Hello world példa • Kedvenc editorba írjuk be (joe, mcedit, vi, emacs, kwrite…) #!/bin/bash #ez egy komment echo ”Hello world” • A fájl végén egy újsort szokás tenni. • Az első sor kommentje a „shebang”. Egy hint, a file nevű programnak jelzi, hogy ez milyen fájl is valójában. • Adjunk neki futtatási jogot: chmod +x helloworld.sh • Futtassuk (a ./ azért kell, mert az aktuális könyvtár nincs a path-ban) ./helloworld.sh

  6. Változókezelés • Környezeti változók • Lehetnek beállított/beállítatlan állapotban • Értékadással beállítható, akár üres stringre is • set-tel megnézhetők az éppen beállított változók • unset-tel visszatér beállítatlan állapotba • Típusok • Minden változó stringként tárolódik • A behelyettesítés helye alapján derül ki, hogy hogyan értelmeződik • Magában illetve ” ” és ` ` környezetben stringként értelmeződik • $(( )) környezetben egész számként értelmeződik

  7. Változókezelés #!/bin/bash VAR1=Ertek#Értékadások VAR2=4 var3=8 echo”$VAR1 $VAR2 $var3”; # behelyettesít echo’$VAR1 $VAR2 $var3’; # nem helyettesít be echo ${VAR1} ${VAR2}${var3}; #behelyettesít, ez 2 paraméter az echo-nak echo ${HELLO}; #deklarálatlan változó, üres stringgel helyettesíti, hacsak a #környezetből nem kapott értéket HELLO=`./helloworld.sh`; #parancsot futtat, az eredményt behelyettesíti HELLO=$(./helloworld.sh); #ugyanaz, mint fent echo ${HELLO}; #már van értéke. #vigyázat a Hello World! string 2 paraméterré válik, ha nem ”${HELLO}”-t írunk! unset HELLO; #már nincs értéke

  8. Környezeti változók láthatósága • A környezeti változók alapból nem adódnak tovább a gyerek folyamatnak. • Sima script futtatás új „gyerek” bash folyamatot indít! • export – kilistázza az öröklődő környezeti változókat • exportVALTOZONEV – öröklődővé teszi a változót • Gyerek folyamatban beállított változók nem adódnak „főlfele” a hívónak • sourcescript_file – úgy futtatja a megadott fájl tartalmát, hogy nem indít gyerek folyamatot.Gyorsabban fut, a változók beállítva maradnak.

  9. Tömbök Használhatunk tömböket ARRAYVAR=(ERTEK1 Ertek2 ”Ertek3”); #értékadás #felsorolással OTHERARRAY[5]= ”Ertek4”; #értékadás konkrét indexre, ritka tömb echo ”elemszám: ${#ARRAYVAR[@]}”; echo ”első elem $ARRAYVAR”; #for ciklus az összes elemre, figyeljünk a ;-k helyére! #Ritka tömbnél így nem működik! for ((i=0;i<${#ARRAYVAR[@]};i++)); do echo”${ARRAYVAR[$i]}”; done;

  10. „Mágikus” változók • Néhány változónak speciális jelentése van • Bemenő paraméterek • $1, $2 … - script indításakor bemenő paraméterek • $# - paraméterek száma • $@ - az összes paraméter egy tömbben • Előző parancs • $? – legutóbbi futtatott parancs visszatérési értéke • $! – legutóbbi háttérben indított folyamat PID-je • $$ - éppen futó shellPID-je • Mezőelválasztó karakter • $IFS – ennek az értéke alapján automatikusan darabolja a stringeket külön paraméterekké • Alapból az IFS értéke minden whitespace” ” ”\n” ”\t”

  11. Fájlnév kiegészítés • Szokásos fájlnév-minta kiegészítő karakterek • * - tetszőleges string • ? – egy karakter • Egyik megoldás:SHFILES=*.sh; # behelyettesítődik fájlnevekreecho$SHFILES; # egy stringben összes fájl nevefor a in$SHFILES; do# vigyázat, ha fájlnévben $IFS karakter van, # akkor ott elválasztja!echo ”$a”;done; • Másik megoldás (újsor karakternél vág, nem pedig $IFS-nél):ls *.sh | whileread line; doecho ”$line”;done;

  12. String darabolás VAR=’foo:bar:cuc:mak’# darabolás IFS-selOLDIFS=$IFS; #sosem árt elmenteniIFS=’:’;for a in$VAR; doecho ”$a”; doneIFS=$OLDIFS # ne felejtsük el visszaállítani# darabolás mintaillesztéssel# levágja amire illeszkedik a mintaecho${VAR#*:}; # legkisebb prefixet vág foo:echo${VAR##*:}; # legnagyobb prefixet vág foo:bar:cuc:echo${VAR%:*}; # legkisebb postfixet vág :makecho${VAR%%:*}; # legnagyobb postfixet vág :bar:cuc:mak Bonyolultabb esetekre: cut, awk, sed

  13. Elágazás • Példa:NUM1=$1;NUM2=$2;if [ $NUM1 –eq $NUM2 ]; thenecho”$NUM1 egyenlő $NUM2”;elif [ $NUM1 –gt $NUM2 ]; thenecho”$NUM1 nagyobb, mint $NUM2”;elseecho”$NUM1 kisebb, mint $NUM2”;fi • A [a test program neve (igen ez egy program neve ) • Lásd: man testa lehetséges paraméterezésre • Figyeljünk a space-ek megfelelő helyére! • Visszatérési érték: 0 - igaz, egyébként hamis, ez a shell scripteknél pont fordítva van, mint a „rendes” programnyelveknél

  14. Átirányítások • Standard I/O, minden programnak • 0 – stdin • 1 – stdout • 2 – stderr • Átirányítás • cat fájlnév #fájl→stdout • cat fájlnév 2>&1 #stderr→stdout • cat fájlnév > másikfájl #fájl→stdout→másikfájl • cat fájlnév 2> másikfájl #fájl→stdout, stderr→másikfájl • cat fájlnév &> másikfájl #minden a fájlba ömlesztve

  15. Csővezetékek • cat fájl | grep ’x’ #catstdout-ját a grepstdin-jába • Láncolhatóak az alkalmazások… DE… • Formázatlan bináris adatátadás történik • Gyors, de strukturált adatot nem kezel • Strukturált adatot szöveges formába kell alakítani (valamilyen módon), majd a fogadó oldalon sorokra, majd azon belül mezőkre bontva feldolgozni • Erre használható programok: cut, awk, sed (tokenizálás, reguláris kifejezések stb.) • Erre jó a bash is, pl a pipecmd | whileread$VARvagy for$VARin$(pipecmd) konstrukciókkal • Egyszerű adatszerkezeteknél még elmegy… • Az emberek itt szokták értékelni a Powershellt

  16. Trükkök Ha a bemenet eleve így van megadva:BEALLITAS=ertek1OPCIO=ertek2LISTA=(elem1 elem2 elem3) A bash maga parse-olja nekünk, és utána mint változókat használhatjuk:source ./inputfileecho$BEALLITAS; #ertek1 lesz a kimenet De vigyázat, mindent végrehajt, ami a bemenő fájlban van! Nagy biztonsági kockázat.

  17. Reguláris kifejezések • Sok helyen használhatjuk őket • Pl. sed, awk, grep • (Perl, Java, C#...) • Egyszerű string manipulációt nagyon megkönnyíti • Példa kinek a nevét írtuk rosszul

  18. Reguláris kifejezések • Megoldás: • Exportáljuk CSV-be a táblázatot, így fog kinézni: "Személy","Kedvenc étel","mennyiség„ "Don Mascarpone","Tiramisu torta","3 szelet" "VitoMascarpone","Bolognai spagetti","2 tányér" "Kicsi Angelo","Gelato fagylalt","5 gombóc" "Nagy Luzio","Gelato fagylalt","2 gombóc" "Federico mortellini","mogyoró","nagy zsák"

  19. Reguláris kifejezések Egy lehetséges megoldás:cat temp/csvdemo.csv | cut --delimiter=’,’ -f 1 | grep -v ’”[A-Z][a-z]* [A-Z][a-z]*”’ Eredmény:"Személy" "Federico mortellini"

  20. Tanácsok, hibakeresés • Legyen komment a script elején • Ki írta, mire való, hogy kell paraméterezni • A bemenő paramétereket ellenőrizzük • Dobjunk hibaüzenetet, ha helytelen a paraméterezés • A script NE töröljön vagy írjon felül olyan fájlokat, amire nem kértük •  • Ideiglenes fájlokhoz használjuk az mktemp-et • Hibakereséshez hasznos: bash –x • A behelyettesítések utáni parancsot kiírja • Script futása közben követhető minden művelet, értékadás stb. • Változónév elírások ellen: set –u • Ne helyettesítsen be üres stringgel olyan változókat, amik nincsenek definiálva, helyette dobjon hibát

  21. További info http://www.linuxconfig.org/Bash_scripting_Tutorial http://tldp.org/LDP/abs/html http://www.hit.bme.hu/~szandi/unix/index.html man bash, mansed, mancut, man sort, man grep… 

  22. Tartalom • Műveletek automatizálása, scriptelés • Eltérések az általános programozási nyelvekhez képest • Linux alatt Bash • Windows PowerShell

  23. PowerShell Itt nem string ment át a csővezetéken, hanem egy System.Diagnostics.Process objektumokból álló gyűjtemény! Új szkript környezet a Windowsban bash/Perl/stb. tapasztalatok alapján Újdonság: teljesen objektumorientált, .NET alapon

  24. Powershell – elindulás • Powershell2.0 letöltése • Windows Management Framework kiegészítés része • Elérhető XP-re is • PowerGUI • GUI szerkesztő, debugger

  25. PowerShell alapok • cmdlet • Általában Ige-Tárgy forma • Alap parancsokhoz megszokott aliasok • Pl. cp, copy -> Copy-Item • Legfontosabb billentyű: TAB • Automatikus kiegészítés: cmdlet, paraméter, változók… • Legfontosabb cmdlet-ek: • Get-Command: parancsok listázása • Szűrés pl.:Get-Command-Nouncsv • Get-Help: súgó, paraméter leírás, példák

  26. Powershell változók • Változó: $nev • Nem érzékeny a kis/nagybetűkre • Típuskonverzió automatikus • Pl.: $a = "Hello" # System.String • De: [int] $ev# explicit megadás • Lehet bármilyen .NET objektumot létrehozni: • $list = New-ObjectSystem.Collections.ArrayList • Mit csinálhatok egy változóval? • Get-Member –InputObject$list • Escape szekvenciák: `t, `n …

  27. Változó behelyettesítések • Hasonló a Bash-hez $s = "world" "Hello $s"# behelyettesít 'Hello $s'# nem helyettesít be • Kiértékelés kikényszerítése $a = 1 Write-Output" $a + 1 "# 1 + 1 Write-Output" $($a + 1) "# 2

  28. Tömb, hash tábla • Tömb létrehozása: • $numbers1 = @() # üres tömb • $numbers2 = 1, 2, 5 • Elemre hivatkozás: • $numbers2[0] # 0-tól indexelődik • Hash tábla: $p = @{"MZ" = 3; "TD" = 4} $p["MZ"]

  29. Pipe kezelése • Pipeline: legfontosabb művelet (jele: |) Get-Service | Format-List • Rendezés és kiválasztás: Get-Service | Select-Object name, status -first 10 | Sort-Object Status • Művelet elvégzése minden elemen: Get-Process | Foreach-Object {Write-Output $_.Name} $_: aktuális elem • Szűrés: Get-Process | Where-object {$_.Id –eq 4}

  30. PowerShell parancsok • Get-Command • man Get-ChildItem • Get-ChildItem | Get-Member • Szűrés, rendezés • Get-ChildItem | selectName, CreationTime • Get-ChildItem | where {$_.Name -like "D*"}

  31. Vezérlési szerkezetek • C#-ból ismerős szerkezetek: • if, switch, foreach, while… • Sokszor kiváltható pipe segítségével • Összehasonlítás: • -eq: egyenlő (equal) • -lt: kisebb mint (less than) • … • Logikai operátorok: • -and, -or, -not

  32. Egyszerű szkript sablon Fejkomment Paraméter megadás # Name: script.ps1 # Author: Micskei Zoltán # Date: 2010.02.17. # Desc: Exampletemplateforpowershell script # Param: $hello - stringtowrite out param( [string] $hello = $(throw "Supplythestring!") ) Write-Output$hello

  33. Fontosabb cmdlet-ek • Import-Csv CSV fájl importálása • Get-Content Fájl tartalmát beolvasni • Get-ChildItem Gyerekelemek lekérése • New-Item Új elem (fájl, registry kulcs…) • Write-Output Szöveg kiírása • Select-String Szöveg keresése • Valamint a teljes .NET Framework ! • Pl. szöveg manipuláció -> System.String metódusai

  34. PowerShell scriptek • Használjunk PowerGUI-t • Írjunk egy scriptet, ami lekérdezi, hogy hány svchost.exe fut, és hogy a legtöbb memóriát foglaló az 10 MB-nál többet használ-e! • Írjunk egy scriptet, ami egy CSV fájlban tárolt neveket és HF pontokat kiolvasva kiírja az adott emberek átlagát.

  35. További tippek • & parancs – parancs végrehajtása • &? – sikeres volt-e az előző utasítás • Sortörés: ` (HU billentyűzeten: AltGr + 7) • Számított tulajdonságok: Get-process | select-property @{n="nev"; e={$_.name}}, @{n="nap"; e={$_.StartTime.Day}}

  36. Miért fontos a PowerShell? Adminisztrációs felület, MMC Admin UI Szkript Szkript PowerShell COM felület .NET Framework Szerver-funkcionalitás Múlt Szerver-funkcionalitás Jelen, jövő • Új rendszeradminisztrációs motor a Windows és a szervertermékek adminisztrálásához • Parancssori környezet, új nyelvvel

  37. További információ • Scripting / PowerShell témaközpont • PowerShell – Ismerkedés a környezettel (videó) • PowerShellTutorial (10 részben az alapok) • PowerShell könyv (ingyenes, magyarul) • PowerShellcheatsheet

More Related