Windows käsurida
Igale arvutile on töötamiseks paigaldatud operatsioonisüsteem (näiteks MS...
Funktsiooni eesmärk on lihtsustada koodi kirjutamist – esiteks vältida korduvate koodide uuesti ja uuesti kirjutamist ning samal ajal hoida kood lühem ja arusaadavam. Need saab üldiselt jagada kaheks – sisseehitatud (built-in) ja kasutaja poolt loodud (user-defined). Sisseehitatud funktsioone oleme juba tublisti ilma probleemideta kasutanud ja tavaliselt sarnanevad need ka teiste keeltega. Selles peatükis vaatame natuke tekstiga ja matemaatikaga seotud funktsioone ning õpime, kuidas luua oma funktsiooni. Kuna PowerShellis tegeleme objektidega, siis sellele rakendatavat funktsiooni kutsutakse hoopis meetodiks (method).
Kasutame Get-Member
käsku, et teada saada, millised on võimalikud meetodid tekstiga töötamiseks.
1 2 | "suvaline tekst" | Get-Member |
Teksti algusest ja lõpust tühikute eemaldamiseks kasutame “trim”-perekonna meetodeid.
1 2 3 4 5 | $tekst = " lorem ipsum " $tekst.Trim(); $tekst.TrimEnd(); $tekst.TrimStart(); |
Tekstist mitmete tühikute eemaldamiseks otseselt meetodit pole. Küll aga saaksime kasutada nn pattern mustrit. Me pole seda veel õppinud aga pane selle ikka siia. Lisatud koodis tähistab \s
tühikut ja kasutades +
märki, tähendab see “mitu tühikut”. Ning see asendatakse ühe tühikuga.
1 2 3 4 | $tekst = " lorem ipsum " $uusTekst = $tekst -replace "\s+"," " $uusTekst.Trim() |
1 2 3 4 | $tekst = "lorem IPSUM" $tekst.ToLower() $tekst.ToUpper() |
Antud juhul on olemas meetodid, mis muudavad teksti kõik suur- või väiketähtedeks. Soovides näiteks nimede puhul, et iga algustäht oleks suurelt, tuleb natuke teistsugust lähenemist proovida.
1 2 3 | $tekst = "lorem IPSUM" (Get-Culture).TextInfo.ToTitleCase($tekst.ToLower()) |
Teksti puhul ei tohi unustada, et tegemist on ka massiiviga. See tähendab, et tegemist on üksikute märkidega, mille poole saame pöörduda. Näiteks esimese märgi saamiseks kasutame indeksit 0:
1 2 3 | $tekst = "lorem IPSUM" $tekst[0] |
Kasutades Substring()
meetodit, saame valida, millist osa me tekstist soovime saada:
1 2 3 | $tekst = "lorem IPSUM" $tekst.Substring(2,3) |
Selle vastupidine meetod oleks Remove()
, mis eemaldab tekstist soovitud osa:
1 2 3 | $tekst = "lorem IPSUM" $tekst.Remove(2,3) |
Mida me veel oleme kasutanud ja vajame ka edaspidi on teksti tükeldamine. Võtame hetkel suvalise lause ja tükeldame sõnad tühikute kohapealt. See loob omakorda sõnadest massiivi, kust saame jälle indeksite abiga sõnu kätte:
1 2 3 4 | $tekst = "Lorem ipsum dolor sit amet" $tykeldatud = $tekst.Split(" ") $tykeldatud[0] |
Tekside liitmiseks eraldi meetodit pole. Kui soovid erinevaid sõnesid kokku liita, siis kasuta + märki.
1 2 3 4 | $t1 = "Lorem" $t2 = "Ipsum" $t1+" "+$t2 |
Kui lisad muutujad jutumärkide vahele, siis võib + märgid ära jätta
1 2 3 4 | $t1 = "Lorem" $t2 = "Ipsum" "$t2 $t2" |
Tekstist mingi märgi või osa leidmiseks ja asendamiseks kasutame Replace()
meetodit.
1 2 3 | $tekst = "Raivo Järvi" $tekst.Replace("ä","a") |
Kui nimes on teisigi täpitähti näiteks, siis kasuta antud meetodit veel ja veel.
1 2 3 | $tekst = "Jüri Külajõe" $tekst.Replace("ü","u").Replace("õ","o") |
Lihtsad aritmeetilised tehted töötavad PowerShellis nagu ikka
1 2 3 4 5 6 7 | 3 + 4 #liitmine 3 - 6 #lahutamine 3 * 8 #korrutamine 3 * ( 3 + 6 ) #tehete järjekord 3 / 4 #jagamine 3 % 2 #jääk |
Võimalikud meetodid asuvad aga[Math]
teegis.
1 2 | [Math] | Get-Member -Static -MemberType All |
Siin võiks aga suurem osa meetoditest juba tuttavad olla. Meetodi kasutamiseks tuleb selle ette lisada teegi nimetus [Math]
ja kaks koolonit:
1 2 3 4 5 6 7 | [Math]::Round(3.64) [Math]::Round(3.64,1) [Math]::Floor(3.64) [Math]::Sqrt(81) [Math]::Pow(2,3) [Math]::Abs(-3) |
Ja kui valemis on mitu meetodit, siis tuleb iga kord [Math]
teek välja kutsuda. Näiteks leiame ringi pindala raadiuse järgi ning ümardame vastuse kaks komakohta.
1 2 3 4 | $r = 9 $s = [Math]::Round([Math]::PI*[Math]::Pow($r,2),2) Write-Host $s |
Oma funktsiooni ehk alamprogrammi loomiseks kasuta järgmist süntaksit:
1 2 3 4 | function minuFunktsioon{ "Hello PowerShell" } |
Ja välja kutsumiseks kirjuta lihtsalt funktsiooni nimi:
1 2 | minuFunktsioon |
PowerShell ise soovitab, et funktsiooni nime valikult lähtuda nende loogikast <tegusõna>-<nimisõna>. Ja eriti õnnelikud ollakse kui kasutad inglise keeles nimesid, mille tegusõnad oleks Get, Set, Add, Remove jt.
Tihti on vaja funktsioonile töötlemiseks mingid andmed ette anda, mida kutsutakse parameetriteks. Neid on võimalik luua/lisada kahte moodi. Esimene näide on tuntud ka teistest programmeerimiskeeltest, kus sulgude vahe lisatakse parameetrid koos vaikimisi väärtustega. See tähendab, et kui funktsioonile ise parameetreid ette ei anna, siis kuvatakse vaikimisi väärtused.
1 2 3 4 5 6 7 8 9 10 11 12 13 | function ytle-tere($nimi="vaikimisi nimi", $vanus=0){ "Tere $nimi, $vanus" } ytle-tere ytle-tere "Mario" 37 ytle-tere -vanus 37 #Väljund # Tere vaikimisi nimi, 0 # Tere Mario, 37 # Tere vaikimisi nimi, 37 |
Aga kui antud nime puhul ei tea soovitud nime, aga vanust, siis saab selle lisada vajaliku objekti nimetuse miinusega -vanus
näiteks. Teine võimalus on parameetrite lisamine funktsiooni sisse:
1 2 3 4 5 6 7 8 9 10 11 12 | function ytle-tere{ param($nimi="vaikimisi nimi", $vanus=0) "Terekest $nimi, $vanus" } ytle-tere "Mario" 37 ytle-tere #Väljund # Terekest Mario, 37 # Terekest vaikimisi nimi, 0 |
Teine näide on tegelikult PowerShelli ametlik süntaks. Selle eelis on edasiarendus, mis lubab funktsiooni täiendada. Näiteks muuta parameetrite lisamine kohustuslikuks.
1 2 3 4 5 6 7 8 9 10 11 | function ytle-tere{ param ( [Parameter(Mandatory=$true, HelpMessage=’Lisa oma nimi’)] $nimi, [Parameter(Mandatory=$true, HelpMessage=’Lisa oma vanus’)] $vanus ) "Terekest $nimi, $vanus" } |
Nüüd kui unustasid atribuudid lisada, siis küsitakse need üle:
1 2 3 4 5 6 | cmdlet ytle-tere at command pipeline position 1 Supply values for the following parameters: (Type !? for Help.) nimi: mario vanus: 37 |
Ja kui soovid, et funktsioon lihtsalt tagastaks mingi väärtuse, kasuta return
käsku
1 2 3 4 5 6 7 8 9 10 11 | function dec-to-bin{ param($Number) $teisendus = [System.Convert]::ToString($Number, 2) return $teisendus } dec-to-bin 1020 #Väljund # 1111111100 |
Nagu me alguses alustasime sellest, et iga käsuga on PowerShellis kaasas abitekst. See sisaldas kirjeldust ja näidiseid. Nii saab ka oma funktsiooniga teha ja järgmisele administraatorile anda juhiseid funktsiooniga töötamiseks.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | function Test-Funktsioon { <# .SYNOPSIS Lühike funktsiooni kirjeldus .DESCRIPTION Pikem ja põhjalikum funktsiooni kirjeldus .EXAMPLE Esimene näide kuidas kasutada funktsiooni .EXAMPLE Teine näide kuidas kasutada funktsiooni #> param ( # Esimese parameetri kirjeldus $Parameter1, # Teise parameetri kirjeldus $Parameter2 ) ‘Ma olen hästi dokumenteeritud funktsioon :)’ } |
Nüüd saame küsida funktsioonilt abi
1 2 | Get-Help Test-Funktsioon |
Või näiteid
1 2 | Get-Help Test-Funktsioon -examples |
Koosta skriptifail, kuhu istutad kaks funktsiooni: