当前位置:   article > 正文

【 Kotlin 脚本编程Kotlin Scripting 】Linux Shell 脚本与Kotlin Scripting

kotlin script

640?wx_fmt=png

Linux 英文解释为 Linux is not Unix。

Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。

Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。

Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

什么是 Shell?

640?wx_fmt=png

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

Linux 的 Shell 种类众多,常见的有:

Bourne Shell(/usr/bin/sh或/bin/sh)

Bourne Again Shell(/bin/bash)

C Shell(/usr/bin/csh)

K Shell(/usr/bin/ksh)

Shell for Root(/sbin/sh)

……

640?wx_fmt=png

本文关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。

在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。

#!/usr/bin/env bash

#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

我发现使用 Shell 脚本还是没有使用 Kotlin Script 来得强大自由。所以,我在这里讲 Shell 的同时,给出了 Kotlin 脚本的实例。

Hello World

shell 脚本

  1. #!/usr/bin/env bash
  2. echo "Hello World!"

运行:

  1. $ ./hello_world.sh
  2. Hello World!

kotlin 脚本

  1. // hello world
  2. println("Hello World!")

运行:

  1. $ kotlinc -script KtsDemo.kts
  2. Hello World!

使用变量

shell 脚本

# 变量:注意 shell 中的变量等于号前后不要有空格

  1. a="I am cat"
  2. echo $a

kotlin 脚本

  1. // variable
  2. val a = "I am cat"
  3. println(a)

数组与循环

shell 脚本

  1. # 数组 & for loop
  2. nums=(1 2 3 4 5 6 7 8 9 10)
  3. declare -i sum=0
  4. for i in ${nums[*]} ; do
  5. ((sum=sum+i))
  6. done
  7. echo "sum is $sum"

kotlin 脚本

  1. // for loop
  2. var sum = 0
  3. val nums = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  4. for (i in nums) {
  5. sum += i
  6. }
  7. println("sum is $sum")

条件判断

shell 脚本

  1. # 条件判断 condition
  2. x=1
  3. y=1
  4. if ((x == y))
  5. then
  6. echo "x=y"
  7. elif ((x>y))
  8. then
  9. echo "x>y"
  10. else
  11. echo "x<y"
  12. fi

kotlin 脚本

  1. // condition
  2. val x = 1
  3. val y = 1
  4. if (x == y) {
  5. println("x=y")
  6. } else if (x > y) {
  7. println("x>y")
  8. } else {
  9. println("x<y")
  10. }

文件 IO 操作

shell 脚本

  1. # io
  2. curPath=$(pwd)
  3. echo $curPath

kotlin 脚本

  1. // io
  2. val f = File(".")
  3. val path = f.absolutePath
  4. println("path:$path")

定义函数

shell 脚本

  1. function
  2. function sum(){
  3. v1=$1
  4. v2=$2
  5. v=$((v1+v2))
  6. echo $v
  7. }
  8. sum 1 2
  9. s=$(sum 1 2)
  10. echo "s is $s"

kotlin 脚本

  1. // fun
  2. fun sum(a: Int, b: Int): Int {
  3. return a + b
  4. }
  5. val c = sum(1, 2)
  6. println("c is $c")


640?wx_fmt=png

kscript - Having fun with Kotlin scripting

Enhanced scripting support for Kotlin on *nix-based systems.

Kotlin has some built-in support for scripting already but it is not yet feature-rich enough to be a viable alternative in the shell.

In particular this wrapper around kotlinc adds

  • Compiled script caching (using md5 checksums)

  • Dependency declarations using gradle-style resource locators and automatic dependency resolution with jcabi-aether

  • More options to provide scripts including interpreter mode, reading from stdin, local files or URLs

  • Embedded configuration for Kotlin runtime options

  • Support library to ease the writing of Kotlin scriptlets

  • Deploy scripts as stand-alone binaries

Taken all these features together, kscript provides an easy-to-use, very flexible, and almost zero-overhead solution to write self-contained mini-applications with Kotlin.


kscript presentation from KotlinConf2017!


  • Installation

  • Script Input Modes

  • Script Configuration

  • Text Processing Mode

  • Treat yourself a REPL with --interactive

  • Boostrap IDEA from a kscriptlet

  • Deploy scripts as standalone binaries

  • Embed kscript installer within your script

  • FAQ

  • Support

  • How to contribute?

  • Acknowledgements

Installation

To use kscript just Kotlin and Maven are required. To install Kotlin we recommend sdkman:

  1. curl -s "https://get.sdkman.io" | bash # install sdkman
  2. source ~/.bash_profile # add sdkman to PATH
  3. sdk install kotlin # install Kotlin

Once Kotlin is ready, you can install kscript with

sdk install kscript

To test your installation simply run

kscript --help

This will check and inform about udpates. To update kscript simply install it again as described above.

Installation without sdkman

If you have Kotlin and Maven already and you would like to install the latest kscript release without using sdkman you can do so by unzipping the latest binary release. Don’t forget to update your $PATH accordingly.

Installation with Homebrew

On MacOS you can install kscript also with Homebrew

brew install holgerbrandl/tap/kscript

To upgrade to latest version

  1. brew update
  2. brew upgrade holgerbrandl/tap/kscript
Build it yourself

To build kscript yourself, simply clone the repo and do

  1. ./gradlew assemble
  2. ## Run kscript from output dir
  3. ./build/libs/kscript

Script Input Modes

The main mode of operation is kscript <script>.

The <script> can be a Kotlin *.kts script file , a script URL, - for stdin, a process substitution file handle, a *.kt source file with a main method, or some kotlin code.

Interpreter Usage

To use kscript as interpreter for a script just point to it in the shebang line of your Kotlin scripts:

  1. #!/usr/bin/env kscript
  2. println("Hello from Kotlin!")
  3. for (arg in args) {
  4. println("arg: $arg")
  5. }

更多内容参考:https://www.kotlinresources.com/library/kscript/


Kotlin 开发者社区

640?wx_fmt=png

国内第一Kotlin 开发者社区公众号,主要分享交流:编程语言、Spring Boot、Android、React.js/Node.js、函数式编程、编程思想、系统架构设计、领域建模等相关主题。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/538156
推荐阅读
相关标签
  

闽ICP备14008679号