在脚本中运行Scala

在脚本中运行Scala、在脚本中使用Scala的高级特性、如何让Scala脚本快速运行shell


Scala又一强大的功能就是能够以脚本的形式运行。咱们能够建立一个测试文件scala_shell_1_test.sh,内容以下:apache


#!/bin/shbash

exec scala -savecompiled "$0" "$@"ide

!#函数


println("Hello, Welcome to http://www.iteblog.com!")测试

args.foreach(println)spa


/*命令行

经过savecompiled命令能够将这个scala_shell_1_test.sh脚本编译成scala_shell_1_test.sh.jar包scala

而后每次经过下面的命令就能够省去编译步骤,直接执行blog

scala -cp /Users/michael/scala_shell_1_test.sh.jar Main a c d*/


而后咱们就能够下面之一的方式运行这个Scala脚本:

[iteblog@www.iteblog.com iteblog]$ sh scala_shell_1_test.sh 

Hello, Welcome to http://www.iteblog.com!

或者

[iteblog@www.iteblog.com iteblog]$ chmod 744 scala.sh

[iteblog@www.iteblog.com iteblog]$ ./scala.sh a b c

Hello, Welcome to http://www.iteblog.com!

a

b

c


上面两种运行方式就像运行shell脚本同样,彻底不须要知道里面是Scala代码。

 须要注意的是,在运行上述脚本必须事先配置好Scala环境,也就是能够在命令行里面直接用scala命令:

能够将下面的内容加到你home目录的.bashrc文件里面或者是/etc/profile里面

SCALA_HOME=/home/iteblog/scala-2.10.4

PATH=$PATH:$SCALA_HOME/bin


若是你须要传参到Scala脚本里面,能够将代码修改为:

#!/bin/sh

exec scala "$0" "$@"

!#


args.foreach(println)

上述代码的第二行中的$0和$@分别获取脚本的名称和参数。args的类型是List[String],因此咱们可使用List的全部方法,好比args.length,args.getClass等,全部传进脚本的参数均可以经过args变量获取。

参考:http://www.iteblog.com/archives/1544


-------------------------------

在脚本中使用Scala最大的好处就是能够在脚本中使用Scala的全部高级特性,好比咱们能够在脚本中定义和使用Scala class,以下:

#!/bin/sh

exec scala -savecompiled "$0" "$@"

!#


case class Iteblog(var site: String) {

        override def toString = site

}

println(Iteblog("http://www.ioteblog.com"))

运行这个脚本能够输出http://www.ioteblog.com。


咱们也能够在脚本中使用main函数:

#!/bin/sh

exec scala -savecompiled "$0" "$@"

!#


object HelloIteblog {

        def main(args: Array[String]) {

                println("Hello" + args.mkString(","))

        }

}


HelloIteblog.main(args)

 定义main函数和正常的写法同样,只不过咱们须要使用HelloIteblog.main(args)的形式调用这个main函数。


  不少时候,咱们编写程序的时候每每是须要依赖外部的类。由于在脚本里面可使用全部Scala的特性,因此咱们也能够在脚本中指定须要依赖的jar包,使用方法以下:

#!/bin/sh

exec scala -classpath "/Users/michael/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar" "$0" "$@"

!#


import org.apache.commons.lang.StringUtils


println(StringUtils.trim("  ab  c  "))

println(StringUtils.trim("  ab  c  ").length)


咱们能够看出,这些使用和编写正常的Scala脚本很相似。

参考:http://www.iteblog.com/archives/1547

-------------------------------

文件test.sh

#!/bin/sh

exec scala -savecompiled "$0" "$@"

!#


println("Hello, iteblog!!")

args foreach println

运行这个脚本,咱们能够发现第一次运行的速度仍是很慢,可是当程序运行完,咱们能够在同一目录下发现一个名为test.sh.jar

的jar文件,这就是编译以后的class文件。第二次运行的时候,Scala会检查该脚本是否修改了,若是没有修改,会直接使用以前编译好的test.sh.jar文件,因此之后运行速度会很快.

咱们能够看出这些就是编译后的class文件,咱们能够经过scala命令去运行里面的类:scala -cp /Users/michael/scala_shell_class_2_test.sh.jar Main

相关文章
相关标签/搜索