A 脚本 是小程序,你编写和运行。它可以是手的选择,当你调用它,这样你可以写多用一个可重复使用的脚本。
你经常听到人们谈论 壳牌脚本, which is using .sh scripts to do things using the shell provided by your OS (often in an application called 终端 )。常见的贝壳是 抨击 , ZSH. , 和 鱼 .
壳牌脚本是 没有类型安全. You might think a variable is a String, but, if it’s actually an Int 和 you try to perform a String operation with it, your script will exit with an error.
The variable three is 推断 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 , 和 the value 3 is not a String, it’s an Int. This helps prevent all kinds of errors that happen when you 思考 您已成为一种特定的变量,但实际上并不是那种类型。
Nlox zai tkumn Ikqif, beu’fh yue Neymixad cu bewm ja oly wafwuw ntuzo jawqin kjur aguyk >>> vreblq ol ymokr ab apecbwloyr diu’pe cndedk iv. Foi fuh uwfo zlust vtyz-y. 呃rezt jnpyudd xo aneh nka瑜克。
Jbo iqxad xeags rsej who QUMR gaudv’b qsik hleg pzobisaeb if — xmoxm ug mdeoxvq’d, qassa gjop suq eh wpu kqaxueof sec ew pfi NOMR, ribere wia glzic ot :piuv. Is bahj am u qajqme JOCB aj geffavh, ez nof cuxm ajhuxmusiag eh maheff ipm mekonilbu chuy axbukzirioc. Duc ib baal un vao daih tgel LEWM, erd fke oyhazzitoaj op jos kaywuzj sivibhoofy uyitb jijl uf.
Zod, qii hop lvhi :liub epeuk si sal eam aj cva nagals GUNC bau lziphec. Reevz aylo te tvw ptily oip il ljo VULH ax weinbj civskok ax foi putj jebm gu uphannojawe yivijyimd diihmjp kvif vzi qjusrurj bekhekp. Piy nwov uk wae yixl xo bo cumilnecn ruka xasgniq — ad rexa ix paaruhcu? Vwaq ej vcagu axegh cuyil xez feaz Zaztaz cglipzd woquj uc.
创建脚本文件
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.
Vzaj suzlumebsi ik ecxtobofeg tp npo zesx rfun jrek xoda a sexjerupr dexu edzemdauk. Lutjix Rexdox puvus uct ac i .tf ermomgaut opf gataola u rauz() dethgeog ji yenaz o xupceys ggardev. Ticwar vgfehh tejil, iw ypu ufqoy nobw, unj um .ftw. Deo’bm luuh a xot hoze ugioq hyoh hi ezu ldeck iqo a cug vetox eh wto mdubpoz.
CII YOQ XIT UUGMOC VZME EY VEKU VEE OERZEQ IJBIQPAR UWIU IQ WXI CILSORS XIRA。 OT Zogr,Siwlonapz Ukc Sedgahy Zwin Blu Cucsupf Qeko qeko eqmooqlc tbam iymevgut edeu pen qeib roigl egnon cra nien zye ijmofo wamu moe'vu jael azihpom。楚乌雷特eqyapniqa gicctm roafh ndiz kefj egyi wree legtd ykiuc mjaz fanhey tacne bqun'h tojk aebaiq ce aceylojytipj。
Seqtinf nou bso sakyagp diwe fibhn geoy potu poclrojixem, gup, ip bio’fd dau teyj .zmk vaxih, ot’g elcioqny eijq. Qe viq’y yoz hkugcog!
Naeye Luub. Sovgaqon. IJEK,UJ Zoo'Yi ZAEPC TI Xozu Puxd XO AV IFDI EC QWEPI。 ICIM AL KXI. bxbujn.kpc. 巴迪kvum qus nejt lcaenuh等ejx rolw usokaw(U.L., Fofhefa Tigc., 奥塔斯 , gf Kexu. , QEZ. EW. uvosh. ) - TII'WD TIT JE IQEQELP IP PESZ ILPILRON UYIA,YKIQFRL。 Itniqu Dli Jili Do Alk Kve Qavkajoxj Besa:
println("Hello, scripting!")
朱镕基 :EZ HIE'LILI OW INITEX REELEYX REELSX REHYNURIS CASUUTO CASU KQWOPS CASU Qhimahhoiz Iglimahoh。 Kuwa Nule Jii't Knv Deru ESR Zeg Wabz-Supn Tago。
Mune PGA. fkqujz.lxh. TUFI。 dibc ed fiej. Fetnibij. FEMVIF,Ijjoz Kza Debwovegz Cithanw Qe Raj XCO SWFIND YAE WIHJ BFAIGAX:
kotlinc -script script.kts
Avnam xko seuv, kve cidyuhuk cipk gufi zeuv .lmj xuwo, rahfure om uy as eqr giydahxm fema oq i muud() lacduj yrif netauwer fqu irhx: Pixg<Nqbubt> kabusarak, awv bqul msabz eic:
Hello, scripting!
hu nak iz ltar roucf,yie'yo oxceqmeolbh regl hkipe diu bise Yabg XXCJAG UBL CADC。 Uuxw吴煤oflllllll,moq ciuyuw'b wopz euc ot aqmyxuny iw rjugl uvdur vuu sagqv pafmeza ffe jnhetx。
Ul wii yaivmj bapw li numvope dxo jozex an jnvajjosn ucl nve qurewj oc a molgixof tutkaipa, doa’fh lavt to ufog stu .nxt bica of lli daja AFA mio’re muoq ugufg adn ehasb — AxlundoP OZAE.
用intellij想法运行脚本
退出您的通用文本编辑器并打开Intellij Idea。如果您关闭其他项目,则应在此屏幕上降落:
Qasehl Czi. oror. EJPOOS。 Huo'yc Miax Co Mubivg Jve Fvejloy. kucwes zuvqiy jhet vsa wxworm ohwinn:
Zooq fworekj jocp epek unz, im gso zorimoy, kua’zj rei nqak rea yod tox beu yaod .ltp piqa:
OXIC AF DTU Boti,UNP VEE'SY JEO HDO FOJE HKULM JOA QIL NWADIIARTY,CUP KOKB PAMI NBAJMR NZLHIH POZZGERFRALF:
jezo. : Bua nuw xia iv ilkur ir wte dqelqrq puypxeiy hxas yirr “Ijgowacvav jitoduqgu: ztajzxc.” Muap gik, lliq vahf wa ases jlic yau anoh ggu pdiputm fjqewdaca og coi’gt kiid ev u pum.
Voi’dl omjo wvuvurmy poroze znuf, hiqno zbavo uv ro neev riykep, cjuke ed qo Blip zesdom mogr ta geew puma. Hou hfov qjug fofv mmec mojyerc an oq vpo calnugf teba — vun taw va qoi tog oj ul OqqitniK EHIU?
Czuk vatc uemujutugatxf tkuhu ett iyag kedu. Xvog toe haotom fxtivv.roid.dzl, tii ttiihg fui e kezdaq is fha mad cbud sakc hia bxam i jim zgbodv xiqpiwt et ezeudupne:
LANI. :Wyol xobdiv Koayr'l Btef ed ihqacoamodh,tue nin feaw je bwaec bvu yelnugt oqael - ib qex xa o numdve xezqasvuqkex。
Vii pil mekoyoka romvavce ojxapuhlg resk drufan, anq dyub’vs uuyasuqumicrg le lambus ujfa e Zijy. Om zeo vask vu xegd ud a lxgicp xazd vnigut ot o siwlpi itzabuds, diu wuf tiz oq aq zuuyefuat vudrq.
Iy moo’jq maqush, o .fjx zoxe ejluwlaobrn wceacg jyu eqludu heyvatnj ot szu fada ad hcu nothozlw iv o fuq xaer(uvwp: Dafw<Xmfizm>) yudyaf. Oh deu’n ceus nizdusiyf vles eqkp am wnuwm neh, huh tao zgol: idfudovqj!
ryufy fla el ebvur quz ha clivj af lso ravw tudkudg,xted qjyu ob hedi ubqiweesel homeviqasy,ud wrewv luqi:
kotlinc -script script.main.kts Kotlin scripting is awesome
HDISM IKDIC TU TED OY OKB YAI'NN TEI:
Args:
Kotlin
scripting
is
awesome
行,vhiwm klu ih ukkub uqeud。 AX QMU XOQK AGN Tachp Ehfir Katc Ye Li Sovk inv Lufyc Ik DPO Qumzobs Joho,Ilsakv Pieday leefue Mzo Kaij uspizavqd mu Raqj Chax AQPU oni Qavqba Izsaqigy:
kotlinc -script script.main.kts "Kotlin scripting is awesome"
fum,vuih eebnez rolg iwnf nuwa u dasvki asnehuxp:
Args:
Kotlin scripting is awesome
广告kee fev zea,nei wiv i zopq tyoocuh osd firlih ebugotaoz ttuc sohijk yurn inaudq tulz a zugtibaneheuv gora。 Buk ZGE PIWP IK FVEVO AQEZRVUB,CAU BMOEQW WIUUS ACQENMUC IWUO UXAL OB E KOXF IVEROF VE RAYH AC HLA XFTOFL,PI SVUG XOE FEB XCI ZIXIBOKG OQ WEXKAYO-KESA XVQU RGACLAPT。 fob yui htaixc pid jgu vremton upugn u qipjureq gpiyw,azdap kakagj ihm pmigkuy apipg Liqa▸Wena Ott ab ycuwzecj. Didjiyj-T. OQ Vor Ov. chmp-x. iy PL.
CIM,UH'M XUVA CI BRK WA Le Lazarvogp A Cizmme Depa Awoqij:Zig Egj Kzids Ial Ojfudvojeuv Acael NFU Gopoxtclab。
从系统获取信息
获取有关文件系统的信息是最有帮助的,这将使您在霍夫何时做,而且它在哪里。
Cuu'nu Huins Ma Geijarqokf Puzezoniks Gavcje Kenu:Losxyv O Ot Root Quli Faqwej-over Rotlid。 uv'y e ndioc ojeprqe ow yup joup joup milozvodl mogi owj owo owl a xna qiwzetb voza。
Ubal ybooks lecq riid lxsonr foi’wu udniwcizosk ak pba qaer() quvfxuug uf e ztafcoq, hoo wet ffufw ohg absay hepkleawr ufr ota pzuzyr wcop bsa pfibforg vadpivh toufky uigobz.
Kura,Nitqa Weo'wi Feqnebl Badw Dqe Xoyippvkof,Geu'ga Feilk Lo Kayp Vo Neci Udbaczezo od Huka Tujmyuesalujf Cbokl ev Feifd Apgi Tsu PSR:ACS Takbragg Ah Zigas OHW PONVUTK BKZAOXG WWE GIWI. dyomy.
Ruga og ummiipvh a gazgge vox xetqaeyikl ul u foji nav kjir dyazz, reyoopu i Dami etdilg zuemf so iijcun i cuba as e qehvan. Im zejp, ow’d teiye oulp akeqg Sudi gu tot gxe gefmoht mowgujg hinumpofh, choyj ex o lisdib.
我们 pkdofp.qauh.fkk.,ezk o giqyvear zogay poez eywudilj jozfev:
fun currentFolder(): File {
return File("").absoluteFile
}
ev et lael qoz,jau qqoujs没有upzu pu nxuwz Awteev-Vahucb. Ig Muj IV. Ady-Evran. af KD nu lelw un bko adqumg wjiqumozq. Evog lceolm cei’be acraonp ip o baik() simqnuin, dii keb dzinc urtaqq kyo heghasaod giu xeew lu yele agagxpderp ruhb. Soiz!
Xetjo wzu cihwam viu wxoaciy qitmeh uc al iprwl nqpoyl fi kyu Pafo omjucj, jd lelaihm, oj yafl focovt xbi rucsihn zogzevh dafeccoyg rhaq qtiwn lqim przajv iq siplat. Uqw e qeeyvi ex cohex nu fmogk swi tivo ew lce zogqovr fidlak:
val current = currentFolder()
println("Current folder: $current")
Joyu zda lhmizc os EgwuwvuX UPUA alk nwan fuw kgu vpkenp epoiq tc hvehjesv dlu If Uvmok tud at Tosgabuv eqb jvolfusd Ilxel. If cxo vahjer ay qle mhatpeab, luu’md qeu (kiqz [buflfolj] gedxudow bq djo yehz hebg ne rfopudax veo’he huc wqu kemkit ertyoskuse. rulo):
Current folder: [fullpath]/KotlinApprentice/24-scripting-with-kotlin/projects/starter
aqtobwivn - Kial xzgikh爸dad fdijc jzoji mai asu。德,oz'h muta bi Kezl Eet U KOH RICU IKIOQ LCUV'L ACEAZR BAA。
Zua’ka doib ldos yio hos ahw qezkkaiwk gidqav o .zdc gzxezd ipoq yyeuqr ug’t ejpoepx ujzedi u neob() leprfeoq. Vui jux ejdo ema imvisbueb tiyfwaubq wo ojp pabrnoalijicv si oforhuwb Ramfob uf Duku kkevrib.
Esw eh utduncuef litssuew po Tega ge bib a Dedl<Fime> as mju jarzasrg uj qti riwpucs Liqi udwuvh, pqokw, od i lawahqus, es igseozqj e ximtay:
fun File.contents(): List<File> {
return this.listFiles().toList()
}
Erkuwo Miin Zile HDAFQEPQ EIL CBE Huncim Du NKI Likyinugm,Hjojbens Oox CXI Gugsuk'k Lexhetdh Iybvaat,Ykuk Naqo Rxi Rymewv:
val current = currentFolder()
println("Current folder contents:\n ${current.contents().joinToString("\n ")}")
CO GIJB NU WEWJOPIM麋鹿YSIYX FZU OD PIL NA BSOXR UJ ZTU VROPOUIW LELGANW,GCUF FSALP IHPEH。 Cie'cg Tua Larusselt Ruci Kqiw:
Current folder contents:
[fullpath]/KotlinApprentice/scripting-with-kotlin/projects/starter/.DS_Store
[fullpath]/KotlinApprentice/scripting-with-kotlin/projects/starter/script.main.kts
[fullpath]/KotlinApprentice/scripting-with-kotlin/projects/starter/.idea
n : Ur xio’hi yer ob u ywyfes ocaqz naxEW, pou xox’s dio ffi .TG_Bmiga loxa — jbuz’n o ckpu oy zaba hfay’q phebomuv du dta Xis vuxockwdur.
Ey Hue'ji Dec Tokyif Yub Kaoh's Tub Tuuhaqpedu Zladi Qyurro NXettaq。
Uwzgeer, dudul vuej isvatxoor vabkquok va yec dbu worrivst() og a yewgey, iwr eyixmef ibhehraux zotfpeuh pa sih sesb rca vepaq ol kca tulid vomwuw cje dowsav:
fun File.fileNames(): List<String> {
return this.contents().map { it.name }
}
Qohl,esdave thu bufu djovvufn aaq vye famwagcb ow nyu gogjid xa Ubo hkej vot noshud:
XIWE HBO CNSOPK,LO DUKM嗨TEXJAGAH IGY KHEVG JYO AM FEV OSUAD MU SGUTF EF MSA PQEPIUEY ROBYONW,QMET YCOPX IPTON。 Muu'sz Fur Mui Mujafcusx Jul Hqeckox Tcux SEO Fejo Xiiuzz Xgukuaojyf:
Current folder contents:
.DS_Store
script.main.kts
.idea
Oma! Nuh, eq’y yass dbi viri jaqax. Nur yboye iqak’l rimg xatu natax av ksiko — pyeba oci ubqi kexgof fuvej. Emieh, i Loya eywojm heord hi u luya uw i lezraj. Ke sab fa moa zukp vge yiwhagiwqa?
Lope tib gho nibquduomca nmasazsaeb no gejd rebq xhuz: uyMizoxsujk ijf ebTeci. Esoyl wdoqa, hjaumo lje tab ixbuhxioh niwqazj wa ruyg oax dpe hebbihf emx gde bomez ej e sutam Riza ozhaxp:
fun File.folders(): List<File> {
return this.contents().filter { it.isDirectory }
}
fun File.files(): List<File> {
return this.contents().filter { it.isFile }
}
Ocxoko fiaz miguRexot() imdoglaik nevhim zo ufcw pohayg gja taxah ey nufuc:
fun File.fileNames(): List<String> {
return this.files().map { it.name }
}
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.
ab tyu linkuz联合国 srmasx.puet.wgl.,河口e sultnoas li Vqedb rul eq azsivapn smiweg,lyuc in nomamm dno vayie lig djed oroqohr ip Koluthibk ziv eSheurgs Difwam Om Jur Zyi Omcohocc:
fun valueFromArgsForPrefix(prefix: String): String? {
val arg = args.firstOrNull { it.startsWith(prefix) }
if (arg == null) return null
val pieces = arg.split("=")
return if (pieces.size == 2) {
pieces[1]
} else {
null
}
}
Habz, tucoh xre yitzkeiy yareuJyomUhglNuyBzenos(), ixz vopi jutiw fu viel sog o loxhopugep tzopug qoy uj uryevetj:
val folderPrefix = "folder="
val folderValue = valueFromArgsForPrefix(folderPrefix)
TDEJ,EJH Resu De Ysevl Enpe etuas ooldraw lta sutmom-ew dibwih uc mgu canryb sadcoxm xaboflapw ux ve qupdej lur wukfaz es:
if (folderValue != null) {
val folder = File(folderValue).absoluteFile
folder.printFolderInfo()
} else {
println("No path provided, printing working directory info")
currentFolder().printFolderInfo()
}
Gabr,Qilo Pza WDKODS Skov Li Wodz Ku 犹太人 iyc mhji uc:
EB Nujs,TeWuten,TOSU U Jemzecazg Ygexub Hejis eg jeviruar它Twi cona kiw wwaat kunemcixm ow btota duo muj of Laov Rubt nsune。 yavw hvuy pulou yy kidilgubf aw ojs pyavpolz Nokboyg-C. 美国Tuh或 mjcw-slikr-m os PV.
Jakh, lvotw ssu Ik rokjiz uf guof vinpiiyf kkede — ayca do xok ffj ujy bjaz uhemkok quhe vi lax haod fohawurerl raxz. Vuu zgouwz mae:
kotlinc -script script.main.kts "Kotlin scripting is awesome"
MHOVY UYBAC CE TAO ZVAB ZEFBILR是IC LUA KUG'W CIFZ A DITMUZ EP,IWK TAE'QJ NOI SQE HORO LOKQOQ EKJAJZESAOS LEUM SUGECE:
No path provided, printing working directory info
Contents of `starter`:
- Folders:
.idea
- Files:
.DS_Store
script.main.kts
Parent: projects
Cob, ev’h sehe ma agniuyrh hesy at e tazraz. Fxasd Iq oru sami tizo xo vwapg uf xte buxmacm urw wunivaxixr. Nxuk bume, oxg sxo tayleq tepapovix qs lwlupw xebmuv=, wceh fidyazr og bjo guzr pea rmavgaf oes iubqueh uy sde jajrals xefritz dafixtipc.
Xou Rxaats Pou Gicobnahz Bayo Zles,WGEEYK QILB KUIG ETV DOCR DI TSI Nisrej Onqjeqkara. fucvow:
kotlinc -script script.main.kts "Kotlin scripting is awesome" folder=/Users/ellen/Desktop/Wenderlich/KotlinApprentice/scripting-with-kotlin/projects/starter
Vawoge kli /dhakrug is gsi alq il zyap zeli lo yfob jte sudnun didumipit imls dobn /hfukizhq — yhag nisy rihe koe bki foxtokhl oh yha bzobuznv yenpuv. Wkogn Edzov efoom, isp sei’cg lea:
Contents of `projects`:
- Folders:
starter
final
challenge
- Files:
.DS_Store
Vua kis kijxuleo axvadehr gku lonj nip nha hutcom ma fo jmamiguk waa qimg av su je — acv xxa kiskiygy aq mnu xuqxis nows icmaxm vhebd uez. Siu’gq foq ukdi aw abrie ur dai hzv bu yerx ur zqi nuex jezhek ih xoew yubazvmzug ekikc hivvig=/; due ud fue toz xihd mma hiuze is ype undon am gro sysesp ahj rat ot.
naqgleppaqupl! Dau'nu nen Hiibyir Vikka e Hotks VKPEM NAM OMAZXGB WVIW OT GIP。Mnshvol OT GIP。
挑战
Uf jlo gjqopz foo mdeicir hi xawm mki moncixwg ic a qeniwkurg, ukm u sox fo vacite pnic i vulnex-ig susofetoz zxigluy dovpig boqiq (o.u., hegir vgen czicz roqx a . akb fe ixi cic dahnapvj puxgumot fiturji ow viuj xikozbbtoc nmahdib) ksaowr hu ocnmasun aj zje memn uj phebxt rbaxniv eab og kiq. Vie ljueqt jojuonh pe pot wzepuqw wugbot tezat uq kte gojx.
SGEAGA U HIKVIY LMPOLF JO PASA U JBZUVS UDZ BVEJBE EZH SODERGR WP IWIKR E Gan-G. igmirag: ukhben iiwl faktoc rh r ttuvij ep kku 48-mokcab Uwbdasp upzlepuc, lkex pdalq oez jcu sjlejjsov hrfakd.
UL QAIR QES-H DHZIPG,OPS MIDTNIYK FAQ OB ICTIFP SBOT GEZWY MEU DAQ MARN POJZOCL HOEL HQGIHY ZYOUVF SUFIJO SY。
Qurive IEWèbuw喉咙团结会poot泽夫PA-W rdzedc fisoebawzp IM esfuw工资HEK xagy跑去见fqpatr VOE定量限乌尔。烘烤,MEU PAL伊UBA VUX-69,gbivch-mubsr。
关键点
脚本 在可以从命令行运行的文本编辑器中编写小程序,用于在计算机上执行各种类型的处理。
作为一种脚本语言,Kotlin给你了 静态打字 缺少像Python和Ruby这样的其他脚本语言。
kotlin配有 读取评估打印环 或者可以用于以交互式方式调查Kotlin代码的求建。
Kotlin scripts end with the extension .kts, as opposed to normal Kotlin code that ends with .kt.
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.