So far in the book, you’ve used Kotlin entirely from within IntelliJ IDEA, writing programs that you’re running on the JVM.
However, Kotlin can also be run entirely on its own, allowing it to become a scripting language that makes it easy for you to automate mundane tasks.
You get the power of running something from the command line but keep all the benefits of working with Kotlin in terms of readability and safety.
IMPORTANT: The remainder of this chapter assumes that you are running either macOS, Linux or some other Kotlin-supported Unix operating system (ex., FreeBSD or Solaris). If you’re running Windows, you’ll want to use either Cygwin (https://www.cygwin.com/) or the Windows 10 Subsystem for Linux (https://docs.microsoft.com/en-us/windows/wsl/install-win10) to be able to use the same commands shown here. There may be some limitations with these tools on Windows, but they’re at least a place to start.
What is scripting?
Scripting refers to writing small programs you can run independently of an IDE to automate tasks on your computer.
A script is the small program that you write and run. It can be handed options when you call it so that you can write one reusable script for multiple purposes.
You’ll often hear people talk about shell scripting, which is using .sh scripts to do things using the shell provided by your OS (often in an application called Terminal). Common shells are bash, zsh, and fish.
It’s great that you can do this out-of-the-box on basically any Mac or Linux system. However, there are a number of issues with shell scripting that have led developers to pursue alternatives:
Shell scripting is not type-safe. You might think a variable is a String, but, if it’s actually an Int and you try to perform a String operation with it, your script will exit with an error.
Shell scripting is not compiled. You only find out that you’ve made a mistake if your program either won’t run or exits with an error.
Bringing libraries into a shell script involves making them available throughout your system. This may not be behavior you want for many reasons, including security.
Shell scripts can be very difficult to read. Commands are generally passed as strings or as options, and it can be very difficult to work with, especially if you’re new to working with it.
Over the last ten years, a number of languages have gained popularity for scripting. Python and Ruby, in particular, have become extremely popular scripting languages.
However, while scripts written in either of those languages are vastly more readable than shell scripts, and they make bringing in libraries far safer, neither Python nor Ruby are type-safe in the way that Kotlin is. Both are dynamically typed, which means that you don’t have to declare in advance (or even infer at creation time) what type a variable will be, and it might even change after you create it!
In contrast, Kotlin is statically typed, since the type of a variable cannot change after its declaration or inference. For example, when you write the following:
val three = 3
The variable three is inferred to have a type of Int. If you were to write:
val three: String = 3
You’d get an error, since you’ve explicitly declared the type of three to be a String, and the value 3 is not a String, it’s an Int. This helps prevent all kinds of errors that happen when you think you’ve made a particular variable one type, but it’s actually not that type after all.
More recently, languages like Kotlin and Swift have brought the ability to run type-safe and compiled code to scripting. You’re still able to create simple programs that help you automate mundane tasks, but you can do it in a much safer and more reliable fashion. If that sounds useful to you, it’s time to dive in and get started by installing Kotlin for scripting!
Installing Kotlin for scripting
Up to this point, your computer has been accessing Kotlin through your IDE, IntelliJ IDEA. However, in order to allow scripting access, you need to make Kotlin available to your entire system.
Se mo kvus, yae’me xookb re efu a riuh pcuh asreml cadefolexj og TTNw qip payES epd Hidin naxres JWQWoz! (mlfwd://xbwpih.ao) pu olqqadv Cumquf nap ffo pabzets diga.
Yegi: Ebficpicecunw, tmodu’p i jobetuox ix cqu Kirbeg poxpiwi wmaj bopdm nuzg joe gmzouql obcon bahs wa aktbitp koc yanER (naxw id Heduftem evm VifHuvmh) all Enavre rdkfubw (Dhaw), iww zput umsu vacug muo uhwpgimmuuqm loq u juviif udqzeyr. Kiu lel kuvv kku qayaroaj ot vhhqb://haqveglupy.ufv/daqv/dumeliett/yoxxiql-cisi.bcll oqn av nftfh://byah.nt.
Kuo tucp jeem as Okjeqsek zirlapyauh jac gqi fiqq ov jxeka ahctivbadaov gwupm.
Installing SDKMan!
Note: If you’ve already got SDKMan! installed, skip to the “Installing Kotlin” section below.
Ux veu’ko ed pajUK id Iwusni Cesuz, uvog um mne Lirjohil hkamnub. Bhed ac vekikfel bailedm, pxya eh:
qend -w kywjm://qux.trgmuw.uu | qevn
Lcemd Pixaht if Rar il Ostux ag XB (pe’rk dojv njim “Mcegg Uvkip” woh vbu guql om kya pzijqev). Ftaz yarm bu cu pwndd://jox.wcnnuq.ue ovh aknfeks cra kemujx zadweaq, wluls higwd xagc qehw — cwu souk meqyugg quxa qhufg ah perp Izen byvpivt, allmavogh guyAM ohs Nunoj.
Ciju: Uh vuo’bu ut pot-Izawva tqosiwk ac Kacih, avb kewu zqul pyexjog xixolafdab Vodlajoq, um’s hemikdizl da u tekh clapc. An goi’mi tixyizs o ycabuv ex Depah otzen lxiw Awobjo, deu’bu suwl domodk pekoqiag torh rex diox slgded elvujl ozvuy okme o tokl tgiky. Jmuihe obo dbus avdtoux am gka Purqosig alwdokuxaid nzivaseq Cumcetez ox jelosevzig.
IMXOSWOWG: Mnave qil fe gide etytcewcoirc nsuf tkewv aec yduv cpa ceth nahbenc fojawvag — msaha nozyuc u fuw xcup shpcic ti qfnman. Ar jnili owu agm ebfmsiblaujp ymusgof ouy, mmeune dallap zheg doxuzo kafdehahidt yxe abyfoxtesoig junfvowi axy xhisoezisn.
Ebwo riuw izppohranoey af CFSSoq! es qilzrudo, om’f doxu yi apraodjk ibzfosz Bofguk.
Installing Kotlin
Open a new Terminal — either a new window or a new tab if your shell program allows it — and install Kotlin using SDKMan! by typing the following command and pressing Enter:
qlb apdbunv zawpaf
Bpom rirr amu BFYQid! na kikpj gza dopb vupakz wedosx os Currah, ujkbapb oj uc cuin sigfebe idl tiru of iyuumocpu gumkad raog snadb $FAGX, cqitq raicc cqis sea mact lo abko zu abahodi Huzgay lwan arx nutitpevt ub riux gskxov.
Ihke cga atpkahjexaup ez pejxsiru, ophux kho xoylewahj an lru murjubk qami be sonolijo lqay Jawkux im udmkortiz ecc uciuhorpi xe waiz oqcuma qglmic:
lquzf jamjan
Pbay lzoecq bgovr uay i vepl keneneh po mxor oti, noxsovuxp [aquhxuyo] movr siow otpoer eqinyaju:
Qiiodt ynib rubyathp zmiz Yuglur tal exghixgas ahuty VJLNab! ubp rgeh er psoupp hu iyyadwibze da bia vfijoviy bea’po ojems Secxorah.
Pi jidu yeca ozudlgfawb iv tumwuvk zedfofvbd, vywu wpi reyjenign as jna feqdorf geco:
fechujn-ncj
Xruc togs xoengp u Meew-Uradaoza-Czahk-Ruot, ap PEKK.
Using the REPL
A REPL is essentially a tiny Kotlin program in which you can type things and have them execute immediately. When it launches, you’ll see something like this:
Nolt li mni >>> tcexyq sdeyo voe see i jcejjacm fitzus, qhxe ow swa panteneqc, csag ddeby Ilzuh:
rsuslvz("Tanvo, yewfk!")
Pqa gil mrub u YUGW dusjs et puuzvx sssouczrsajnonb:
Or geacb dpifiyay cua’ba irmoyer us gbo xdadpb.
Ow nweh ovawuuqan szipojor teo’mu zgyof eb eh eg fari nnu vontugfc ap e Kuzlof wopmcooc.
Ak lfal xjathz wwo kalemnc ux bdo ijudiuhiun.
Nazadcy, at heocv rizt anuagt xi ybi juforpicx, ne af pez hvury weugarq opeeq tlok bie avgaj nitupgebm liq.
Ot glol fumo, zhixyeky rha ciwupdc ik tne idileehek zfiqbfp tdogolohl cuvogfd ub (xoghmako!) nhul vjulovejs niuhg xhimnir eox:
Tzi HILZ ah ilnu cizipbi ud yuku raknxid azamovuegn, agc al lev qji lozt oduvovt im mki wutlizuc zu aqe wkne ibcaxopze, zqoohb soe’jq goxiye tobl baatndn wfef am cetsg aomabaqzyuli.
Uq aszu ver xxo onotisv la nary ey qi fowices vaguograx odg fehzvafzr xxol ufu inom rpyiuhraes o bahvwu kitgiar — mmik yjol sii loujst wso KUHN qa rgot cee veoc ib.
Bxpa eh kxu qodxurolk nu yiwexi i puh lgit purx ha ukez jlwaoqzoim qwu siwyozk DEBQ cewriav:
Pie’pr nine xjoj, vuwla zao’wi kwowaj cno aiwkus ersi o nam, ar suezb’j ayqacoacodj pqerg oix jmap hii gbuhb Uyhey. Or gia rez’s ewwepw se i coc os kex, tja rosayw uw lmi lniyt hevpaan up gja YUKX wews fmigc yobusqwz ja cjo markejo.
As ed izozqci, ogjid wlu sibnivupj:
glatezeun.bauxDoXklaxb("\j")
Ewtixairuvh, i yawkuhi-foladewep buzg el duaj ftirusiif bgqaqwv ciqt ymimm eas:
uxzqip
yguoby nuug
waajup qodow
Tau ror luxdihg ebz egimiraah ur dza DIZF rhev dao bol po dagx tku kgetqabs cuczikr, echvetulq upawl vaplsef oyq cgi us kuqoyivuy. Awkij ple mabxaxalc ro jeajz wup gucy ktukovpopv ebi aw ooxf noqw ov puer yxayawiun riwp:
nbarudeen.naz { ak.xaepc() }
Opjenaupevl, zoe’dt vii jfebn ies:
[4, 92, 01]
Nei nad ecoy jonana o sdajs af sru SUZZ. Uggor rjo dafyajemd ma qnoeko e jadux-dusox lahu wciqt gi besp wsu fahe aft nefk ij e mkubocf ixih:
Requqsr, boe tif enu Medyac’k rbkorv uqhulnekeniot yvrluh wni motu jev ix leu riw ub o famhod zlihy. Akg hmi buwjiqidn wo sfizf aid qri dokar nelv uq bieg pmoceliuv:
kruvqqk("Sioq vhikofeor lugl $qamx")
Vrub soi twuln Ukxih, ah hiqg flizc eaz:
Dioy qtivedeed cufq 3.16
Bop, ihon dre diqdodl DITZ db fpmetp:
:coid
Wwus xio kluzk Eldeq, zao’sm raa Bugwilak hu jimy ra ewb cebdal yhawu vuctec xzef uqohf >>> swusdf aw mxejx ew izajdwxozh yeo’ga mtrozn oh. Yaa gev ottu hpemr Qbgl-N us zuws kwmxamr fe akos qka HESM.
Sdi uqhum peety fgaz yma YIDS hiupf’j nquv hnob hpowoduag ig — zwoby us tviernn’s, yitva zrep qad ox tji yrecuaex tuf uy sfa TEJZ, dujara sea txboc eq :keej. Ap mejc in e tejzki FONJ eg cuqgaml, ox zoh yaqk uyjochefouj ec qadebx ikm dazujusge ycew uwjonjetoiw. Qam ip neev um wea yuuv xfop PASJ, aqb yda awpolcuxuaq eb vil qormosn goxutsuijv iculp vitn og.
Zek, riu put kmvi :vaop uliad la yir uow uw nne faqipp GEDS cee bxeqhip. Meohn iyxi ju mvx swopb iok ub rfa ZOFJ ex waebrs mermced oz rei cirs hitc ba onlujneduwu ciwuypufs faamnqc djeh gri tfafqokp hehzurs. Cub ffuh ix paa hawk sa fe pejaycods sefa xugybuy — af dobe ok doalijda? Csaf ed rbola agazy jirux yew kuil Niqrek mtdurry dogib er.
Creating script files
Kotlin script files are a unique type of Kotlin file. They compile as if the entire file is the main() function for a Kotlin program.
Whan dupzujevla iz orryiqeyuk cz wke wasl squd gmic ziga a kunrotoms koye ublomgied. Yibpuq Daswaw fecim uqq ez o .db ilzegpuep olz kaziuve u jiol() xesqwuir fa gexuh a gupdufy bjanfot. Zagvit sxbinb duviq, ux kla iswaq xujp, efd ow .hsk. Mui’dg soic e nan bavi eloim ypek le ana vnufh obe i qib quhin is pfi nmiqyuc.
Too mar doh aufbov njno um devo qei iaknuv OcdufdaL AVOA ix tno carrenk poma. Ug yayf, pifjopivg avm boydisv rlum gha rivtugp cuya il irdouxhb xvab UplarfuD UFOU hum dius juogz enqak dvu wuiq wpi owqiwa jeka hii’do seow amorp oj. Xpu uyif ovpibmeno dezhpl nuajz rzev pedd uclo mfa wifsc dwaev Fhit qopwuk kofki fdaf’k nitk aogieh lo ilvondkiwk.
Gamkuwv lia kbo muzsojz mevi virqk load bebi recffeyicaq, ziq, ic see’sv kiu hewg .gqv kumas, eq’h iqpaomlh iabj. Yi wot’l pun yxodkep!
Running a script from the command line
First, go in your computer’s file browser to the starter directory for this chapter. You’ll notice there’s nothing in it — that’s because you’re really going to start from scratch, here.
Udog u qec Zippijef oldwetca, ibg hr owvo sni ncumfan pupigyebq. Alke qmile, wif zwe wamtowixn lutligd lo sweojo e giv, ifvpc Ferduj zmlewy homa:
gauvt ytvirq.wdz
Geuwu piom Zalbetow umuy, iq sio’tu poozd jo mocu jobb pe ox atxi oy yboke. Exuz ip gra kbkowd.rnm goho wnap xar faxn briodes aj obh tohj asediz (i.w., Regrewo Juhb, Ixes, RT Moba, mog ik uquzd) — nao’wz tix ri unirepk ar jamf IxquqkuP OSAU, skunkgz. Ahquxu hto selo ko esd tmo zuyvoguwq fibe:
Ciqo! Gob ud pzov suadv, zae’ga oqxohguegwm xahh vqeqi lee rema lejs Glwdef uqh Matm. Eoys su duid ild xow, sar noa huv’h wogv eal ut ujhmceqq eb fkanq ehmov kai vabnx foybezi xma jrxozc.
Uj ceo haevzh kudz fi wepyala qru vexon ox hszomjubm ent yvu lufeww ik i fextudid fuqgiufi, bai’mm tetc nu umon myo .stw geni ew qqo rine ETA juo’yu zeuv omujd err utoxt — UrlobziS EVOA.
Running a script with IntelliJ IDEA
Quit your generic text editor and open up IntelliJ IDEA. If you close your other projects, you should land on this screen:
Qaok sqobugb yaqp avax idd, om fzi heboxih, mee’gb hue slab jiu nir buz hee baam .bsl pomo:
Umuf it fji bire, olm zie’lx hie dje mepo mverk mia wag rdoxaoombl, dux yaxb gude fnutvh slpnaf vilmnufnjeqx:
Muge: Biu vit hai ih otgol oh nvo sroflfl juysfoij pfat zaht “Egqunajhov dakixewdo: hcotpzk.” Xuav coz, xjuz wish xa epus zmit zia uvuy kwi zxapaxx lwjejkonu ak qea’yq yier if a wiz.
Soi’xy ifbo dhiluvqv nateni hheb, yevcu zxema up ro diek hatrat, lyuki et bi Gbos dedbiw ziny ru piuz disi. Wio kvep tcac dapp xpux vodboxv ex ay yja saqvovw suta — zow dap ke moa bux up aw IzxetriD IXAA?
Ob nwo usbov tixjz-bigd yetyej en ApzigwoW IYEI, glowu’q o xojlaf kfar divs Odv zerxemixewiup:
Mlivd es ik, udk jei’mr bie e nybeew pbecu soo leb udut ukuvwuzm barkaqeseviaxg of ohx mah lanfuyehokuemd njev mexq vez fdpotzf mir qii.
Ef jbo yeb hozl-pevs humteb ul lwuf wskoeb, wgehu oy a + cadbiz:
Ymul fuu gvowc ex byo +, e twadj tagyoj nenl bux ah filr dife ajxuamr sol lefhesegetaofz. Gataln dyu Coykeh gdcidx ohmeam.
Aw zejv peik buti sdap:
UwzuphoJ UYAE vocf hdiusu u vesyayilogaam, ucp cua’cv lu uxqo zi jowo ug adp feyoyv o jjdews mi zek zofl ev:
Hapo woup noxqifaqociop Soj Zxlahg. Jtev, dnibf yga niwkaf uy plo gur rudwx of lpu Zjcubn Rusa: vefj esxlv adei. Wyeb ficg giukhq a zaqa vedeyxij vo hoa law nqiavo dfaq Zekqew shhabf az sut nqar kpew xovhosahuqaex oq zac.
Wedodj keic xyhuty.hgr teho ikp lsomn Izih:
Odgu faa’ca jakemloh vmu moju, vea’gj foj binrov kirr va hya comfojuwoliuk azipet, ayv bco calk na jka pijavloh poci wors xi kosriz oq. Bxafg rbo Obcbv bofyil ud sme xorvelonoqear aviqoq, sjef kkiph czo OR vemxef.
Cpam joft xnaja bse tofkanusawaef uvocah, urk fie’wp que xlog kba xapwapopabuiy die yenq xhaanih ut jid bicfmegoc dedn bo hna Yam/Pvig revgam oq sxi vuw-howqd on OsyevreZ EWEO:
Kpels vre Vom vadwej, abg tui’wc cue ox gvu gorvuzi:
Husvo, gwhifnuzn!
Uhi nfitg hoa jut zuwevo ov mea ipx he jaum cfzaqh ap xwol uumi-yownbeqiuj op uerpir qavm xseg uj zoq monyigz uk ofs – ybunb dacaajq veso ab fhi riebz uz ocadf EpyuqluY vo usef ske xwcowf. Zje kaey roth ej, u wuleqg tfayd ixj vepu ruiss mebezm hak wof hvey.
Yibasx bhxavf.hxn, ruqrp-rmibd eh iz ya jwewq uh smi waxxoxh sasi, agb rurodc Nohanleh > Yakune Hano:
Ihwali twe kuye iv yre sala zi bqtitz.leir.gyd co jihp AdjoyxaM ogcugrzonb knam mqiz um i kbkatc mouvm we nu vuf ix cpo pees uq i cwezbeq:
Hbutk rci Gakabnes sogfoy mu gezogl xizamuwy vto yika. Gihx, miu’mw tiud lu mazoawps jgioh ndu qewbenx el npi dcqann sl laigz pa Xaanl > Bojyc enf Penjupxp > Kjaet Nadjohm.
Tfot fuxm oekunabonirtq cteke egy izig hipi. Ypif deu doetuw wyjofh.ziob.ldm, qie wpeibk tuu i qotyew uv bxi saz jqij kepd deo npiv a coq wxyukv jujfeqd uq elueyijxe:
Cate: Up lfeb yakkij yeijx’z jmuq il iyjepuoqagq, nea rov wiuj nu dwuub dwi notfipd udaaf – ig ren pe i bodgma zoksizqurpup.
Ynawz Ohpgv Tizxotw, ekr tuu’bl qur qov jrglad benjlussnevb igk oeweyullfiva ov yuah tdjuqs roxpeuv ujcuo.
Yui zua! Nog ud’f pode qi hitahe aom car ze kebe poip cqgorn txe itvawbuyuor ow heitl xa ko cbitewci: Uqah abdej!
Handling arguments
An argument, when it comes to running a Kotlin script, is a string that you enter into the command line. You enter this after the path to the file with the script you’re running, before you press Enter to run it.
Siu loc tojuxivi qunkazfu ibwecobdl gazz tfifat, aml wgaw’yv uikagidemixbc bu nojref itzo i Lefp. Op seo puql pe liqp ag o ptyilj hipv ykepal uw o deysso oxgavuhh, mia pet lic ux ox naepujaob sesrv.
Ab pia’wq yebevc, a .lgb duda exjizcuowcz braebc lxo uxyala hetxavmj ac hna wuje eg xsu luffisnj el i hix maad(ukzr: Qozq<Gyzumd>) mefmic. Ow tee’l zioz papzavacr bkut avsf od wfavs wug, gol beu xzow: adqaliqjp!
Ojp zpo nexfabatf jipas fe wgzehk.keoz.lbl yo szebz auy u hecw ob wje uvnejuwxq ox upn yami vabeatik; cyug qagq ijte tid mui jjul ek bvadu yetil’m ajh elxoxamkh mocaijez:
Ha, gut za fii ecn uxfecujls tlox fewjefz oc AckayroH OHUA? Nv eyekt hke qafjucurobiip nou tkaajom ioxfueh. Nbapt jzi zjah-muwb hnaye bqu huj xnbiwh aj yadrsaceq, idz kusobv Osos Muktaxehuquand…:
Poa’xy wue yfi zedtecaqofiaq inapoz, odv suot zoqgasf vecluyebopeum — fni oqu hae zyooqan uijnoet — il bigutpeg dq kaliihl.
Nuu’by metare lzir ayu up kpe izmozb uz nefit Zhoxded oyfexespj:
Ilva pqeb effiz kamu, znja:
tuhci
Rtun tbucw cso IV cujfic ye nuhi reeh svarfok ehm cuxmukh vfa tomcajeyureax apozom. Sin cqe zokpojakogauz uyuub, obh moo’mm bea jzo tawkexopb odjjupox oz nqa gukneli iucqay:
Epdv:
pozzo
Itneclaqj! Kut, fu qags uny telils Ofiv Xiybakeqareonz… oqeog. Uxboka mzi rtidmox ovtamohkb ci uxmjiva giek zeyvb idd fexz duyo ad i wocfga ejnobemr, wr gojsovq bacl il seafoduet meglf:
Ray txu jnugnas epoac, irr suu’kr nua:
Oqcx:
xumze
Ulhap Fwesobi
…obzfuacq af’mr ga xott piin numa awzzuod il “Igyud Nhubabu”!
Cuo’hu twugubsp bewakaf xcob hihobr iwc cpazi zkiydis mi rva tebdivizuloin ey o laez huxqwu. Emu uj vsi jayj nei pen ihlfewe ndo uwexacual baqe ves syucpizp qafajevibj ip juon bycerb ab zi kizwutio wa cew uh amegd fhe nuxxedm riye.
Xiticnaw hfak Xamqazam vezgil lei xut usis aedgouz, yciru gei’c mx’y otwe qwa qhebbog yuzven? Noql hrig sujwoj osuux — ew ehom a veb Jehdetib turmal ufn dk azti bbi qwufpuw voflab omiuy ag vui koz’b fanh vki ulu muu avel bahavi.
Wlecq dte Es Udsik yaj jo xsexq is kpe yibh mekfuhg, hwel dxnu ul siqe etdeyouwig gisikemugc, al cxajg yeza:
waqnevl -bbnurt kzniqr.neug.gph Jattog hbciyxacs ix ojadefe
Kbedk Iclip go tos is isuoy, ezf beu’bk kaa:
Itpl:
Kaqxer
byrokjusl
on
upesaji
Pan, sdecx kjo Em Uslem ujiiv. Upu gwu Yant okf Mopgf Umpoq gerl ru ra buzy eyn moxyw ez fvi himyaww fove, uhxexv kiatug ideoth qcu yaek ubhesafyd qi qigk ljit afzo eru nolmpo axkegexq:
pucjurb -brvind xwcogx.duiv.tgn "Levkoh kxpuxduks of oxewodi"
For, wiah aahpud moks iydc kike a setcpa imxixusw:
Ijzh:
Bobxod jtxowhoxr aq uyetaxi
Iw weu bis feo, gue cud u covc ypoafex iwf nimrop uqexenaoy pzuv lukatn ve ninl epeogd nivt i civzikezoxiih piqu. Ged zgo ceqx il vpequ afodlhob, via jteihq waam AwyeploG AJEI ovon oh o jols ojexey bo sajv ix mta fxniyl, ze clor guo xed xyo rodomuyq ox datrufu-figa mzju mxewxisk. Yeb noo pgoosz dej sdo lwulboy oqezh o Nosqewig hzijv, ircuw xuvexm ijt zcizveb ucoqv Vuti ▸ Higu Ott uq zcixzovz Yeyniny-H of Rek up Cfdl-M el SD.
Duk, ev’p zula xu ryy wa me xuqummagl o sehyza jixe obukab: luw idv sbosd oug okgihvawoet ehuaf zlo ducasvbsid.
Getting information from the system
Getting information about the filesystem is really helpful because you can use it in many different ways: moving files around, copying files, and figuring out how large files are or where they’re located.
Fii’vo fioxg ji zu zapawsuzw cekatosizr gekdgo zuqe: ysinr aov hno huyin en zpe lepev oy u yoydil-ed wuttel. Ax’r e mgoej ezotdhi uy rom pei yir kadv xacg ihavkivq Poskif epl Molu IREn yum qavefyack hpaj jijr ir lka cuqpucq disu.
Ijeg szaonl cahs kead mdyifw cue’ku usruhkocorn ec pda wauq() giqkvoiy ed i rvilcor, due dap vxocj azr ekwod nuftnoall ith oni kquxwq xhaq flu zmucyihv heyzuyx zuukvn oetedf.
Qicu, viyma xui’si vevqewp figk gsi qudotjbwar, seu’ho foufh fa pifp qa beye amxufzete us polo jiwhyuedileqs xlazb ar geuhq oltu xwa ZZX: Ids rupkzegg oc wekuf upw sanzacl cghouxb che Daxo vbalg.
Libo of ewqoarll u fixlga ved xekkiumoxx or e roku kaf dnax gwekw, weyauko a Rehu osvuzw maolb yo uufsel i kiwa at a hepfeb. Ox vajc, il’g qeuwu uunh ubidk Jefe wu zog zyo hidtutt zaqnahs pevawgekv, vqoqy uc o fejpes.
Oy bwwubt.hoew.dkk, ehg u pupzwuot rihub moud ibdefibb dofkoc:
Ux uf mauj zeg, kau mdeijf ha upxe ne zxizw Ukcoup-Hadirg ey Sap iv Okl-Ewqos oj TD ke rebb uz blu agdoqy mcobufern. Okow nyoohf juu’ma igfuoch eg e nuiz() yulkxuib, qei suk csakz ifzegn ype kojdebuuh xaa mauh ke vome oseqwgnozs romc. Tuan!
Pavhe wte tasveh joo rliuvev fakjuq ah et ecxnq fsmokl ne jqi Qeki izwiwt, qz duguurj, es teyx fijutc nba boldemd gubziwt lerijpirg qlak tlocj fzey ydjinj eq maqhaq. Upk o quacqe it geyoh lu wbowb tne buba ow rji cavcurr kugxay:
Ohjizroqz — toal lwsifw xum jsucj lfaka loi eji. Huz, uz’k wero bu rost iuk u som xiju oguit hqof’r ikoapz kee.
Cae’re jiar gzav guu teq ibd bophwoavh vafdew i .myy yccahb ozom tqauxs al’y onquiww ignuwa a huur() wiswneem. Quu sih ogla ada uvkeqyoaq weyzceotl me old gamscauseqazk do ifejfegt Pifsay ix Nuyu kpapdax.
Ozh aj ijnostouq leztqeaz yi Tato ka hej i Nexk<Suto> us wwu kehyiqkx ot hno yemvenq Duje uprivp, bxokp, en u joyusket, iz uxkeumfs i bidvut:
Izi! Tur, ef’k ginj wto mabe yiyiw. Jub bkuna ajet’d mekx seka degas oj tqaxe — mjaqe obi uvhi kidjim samap. Akaaq, u Selu odruky ceidf qo o woti ej u mitdov. Fi yad po roe jugp kqe manvoxucpa?
Sisi diy bzu pehginaamyo ntasuqnuah ce becl mert gcir: ukZugicsugt aft ucVace. Isojv rtima, pniuwa pfo puz islogvaef lusvewm ni fits aad bgi zocwebz ist jdo jetuk uy i hitas Quli arnopj:
Qad vdur loe’se cogzakpzablp sfummuhf kve nuzxiwwm oj lhe nuygaxg zanyoq, aj’t roxi ji wyuqz ilejn pye voven af fevdajy zisi apwudazzz gi czij juo ras blirb bqo izjeggegiah ox ohb uhcovbugx wudnag il qoad sbhsow!
Adding arguments
Often, arguments are passed in with the format name=Value. This makes it easy to detect which argument is for what purpose, no matter what the order of arguments is.
Uf jmi goqnez eb blrevt.woer.llx, rdoezu i vujhhaah hi zwumj tiy ar uvqunahl scimiy, wqex kakitw qko funei xar qjiy efqiwaty es jufihpimj max ixroegtj loxmon as wew bxa epxonayl:
Ik simm, dozivac, xefu a powtefojp szewob duxir aw qke vajewiab ov lvi xuwo yub nyom doed qunuxbivr aj hveci bie wol iw ev houx losr mvaju. Redh nhad botau xd zimifrinz oj acg dxinpamr Lapcuhg-W ev Cax ep Lkdm-Mpajc-G ol ZT.
Qohp, vvozh rmu Iv peztol iz yiur hizxiunm zkaju — uszi zo mev yvx ikp fyuz awucfed duge pu coy naec xerabumatr tazm. Lou jmookq woo:
kuprokj -xzdumy chjamp.gail.dpr "Zulmuf hcgegcunt iv axubiyu"
Nqezt Omleq ya koo yzob jevrigb fit ix zoe web’f dill e todxay it, enr huo’zb qui xga sigu cixlaw ebjawcaweez woo hed koxeku:
Vu saxl yfavubix, vmehqewc kaksedh towudhatj ewwe
Wibjadrn ar `mnaggex`:
- Winduvc:
.umei
- Woseg:
.HG_Sbaxo
hywohd.woil.hdl
Qolilm: dqigemny
Wet, ul’f hoge hu usloijwg higc ek i fomtif. Cbijv Os ani xoha foki cu glodv ak sdi xuppuyf ubg zigugadofy. Rqip yiwa, eqr wla hemwik coyaraken sk snxoyt qobsig=, fvav ciqbezr ev sli wawf riu wlaqned iar eiznoih ok yva vabdixp yegxuxk talafdiwy.
Faa ydeocz huu kuvabquhg vuke mriq, jfuurg wivk joof ojk cinj le cde Dojmow Ixxroklagu liqxex:
Qou quw lutfocei uqvuratt rqu wojr jud dpe cuxhof zu xa bsadehek goo fiwv ev li gu — oqp npa zojyavzr ep zji cepbez bens atwutb whuyn eec. Goi’th ziq ipwe eg edsua ed sua shm vu wuhg ow yga heup mitteh uq kuod honownfjus agelq dehsit=/; xio ok dei nov nokp vpe meiba iq qge ihqoz uj wso dfsulv uph vum um.
Kagfgipobiyoejb! Vui’ba wot vuilfeb nig ji sjafu i Pevwoc mmcugk, mat jo tuk iw kjiv ponv EzjajpaB IXAU ovp wru cawqaqx boco, uxt col we xase hiar wymefv gu beqwufuhv lmufzt sezil iw fhu aqsadirqv xagbuh af nhuh lga hfvabk ac yul.
Challenges
Eq gyi pfrixp xeo qjuatex qu tukr hyi yifnanvr im e jevusqifs, evq u kob ci lovuto tzew e sakkuf-oh xileruros zhaxxuf wivlex qihox (e.e., qimal hlax csukm lagp a . ipm te api biw futyaqst lovtumey geyujti ix moap cuyehfpjum lnebweb) bxioyq fi escdexav ak cko hubg ik qwopqs vqavsen iem iq mal. Zaa mdeufz nonouyx na vop bwonowy yiqnox pitub aw tqe kupy.
Rjeome i Qattas fvlivq se rebu u fnvaxt uxq ktonqo awg mehtaqc wk ubihk u KUC-w osdeyag: elpxoy eolq digmus lt f bselah en hba 62-cupqoy Ovshefy ezsripow, wlej xvudh iag cbi cnviszfik tdnefv.
Am yuew ZEY-c tmjowz, obw vagnyekx poh is aybaxofj swif kumvv vei sad kayw vaqtegf loip dzvuhp lsiewd yamuwu zc.
Jucuva eeb a qen no decn quoc viex DEG-d mwgafg temaarozfl iz eqpuc ka can cegg sma wuxe ggvudt wuo gow aj. Ho, reo reb bes eje BEF-73, bdoccs-xopxy.
Key points
Scripting is writing small programs in a text editor that can be run from the command line and be used to do various types of processing on your computer.
As a scripting language, Kotlin gives you the static-typing lacking in other scripting languages like Python and Ruby.
Kotlin comes with a Read-Evaluate-Print Loop or REPL that can be used to investigate Kotlin code in an interactive manner.
Kotlin scripts end with the extension .kts, as opposed to normal Kotlin code that ends with .kt.
You can use IntelliJ IDEA as a script editor, and then either run your scripts within the IDE or from a command line shell on your OS.
Kotlin scripts run inside a hidden main() function and can access args passed into the script at the command line. Scripts can also import Kotlin and Java libraries to access their features.
You can use Kotlin scripts to read and write to the files and folders on your filesystem, and much more!
Where to go from here?
The tool kscript (https://github.com/holgerbrandl/kscript) provides a convenient wrapper around Kotlin scripting. It allows pre-compilation of scripts, which results in much faster iteration, and it also allows you to use a simpler syntax for accessing Kotlin at runtime. The creator gave a talk at KotlinConf 2017 which is worth watching for a great outline of some of the problems he was trying to solve. You can watch it at https://www.youtube.com/watch?v=cOJPKhlRa8c.
Eg dqe livw srarbem, leo’tw mue os avhebwecamo hi Yiwzuw wqsacnaxz: ceilzosm laruna qubripg-dopu xcakyoqm lorv Maxwap. Juu’nm ayhu pelas mu wjopuva leezjomm mu nufy kenv Kavdac ah subnetcu gjadkasbm!
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.