我们可以使用scala来操作shell,scala提供了scala.sys.process包提供了用于shell程序交互的工具。
1、执行shell
import sys.process._
"ls -al /"!
"ls -al /"!!
尖叫提示:!和!!的区别在于:process包中有一个将字符串隐式转换成ProcessBuild对象的功能,感叹号就是执行这个对象
单感叹号的意思就是程序执行成功返回0,执行失败返回非0
双感叹号,则结果以字符串的形式返回。
2、管道符
import sys.process._
"ls -al /" #| "grep etc" !
3、将shell的执行结果重定向到文件
import sys.process._
"ls -al /" #| "grep etc" !;
"ls -al /" #>> new File("output.txt") !;
4、maven打包在linux运行
import sys.process._
object ScalaShell {
def main(args: Array[String]): Unit = {
println("\n\n-----------哈哈哈哈哈哈--------------------")
//返回0或 非0 , 0表示成功
val v1 = "ls -al /opt"!;
println(v1)
//两个感叹号 表示返回字符串
val v2 = "ls -al /opt/module"!!;
println(v2)
println("-----------哈哈哈哈哈哈-------------------\n\n")
}
}
scala -cp scalastu-1.0-SNAPSHOT.jar unit16.ScalaShell
5、scala不打包运行
[root@hadoop102 module]# vim scalashell.scala
import sys.process._
object ScalaShell {
def main(args: Array[String]): Unit = {
println("\n\n-----------哈哈哈哈哈哈--------------------")
//返回0或 非0 , 0表示成功
val v1 = "ls -al /opt"!;
println(v1)
//两个感叹号 表示返回字符串
val v2 = "ls -al /opt/module"!!;
println(v2)
println("-----------哈哈哈哈哈哈-------------------\n\n")
}
}
[root@hadoop102 module]# scala scalashell.scala
6、Scala 博弈
来吧,自己扇自己的过程 ~ ~
Scala 可以操作 Linux,可以操作shell,你想想这是多么可怕的一件事情,是不是可以干好多事情,Scala可以获取当前系统时间吧,Scala还能创建线程和进程吧,我们可以在Scala中使用定时器,去执行某一个任务,这样的话,我们连crontab都不用使用了,直接所有的任务调度用Scala写完,scala -cp xxx.jar xxx.xxx.main ,连oozie和azkaban这样的大型框架,都不用使用了,那么任务之间的流程控制怎么控制呢? Scala提供了方法
p #&& q操作,即p任务执行成功后,则执行q任务
p #|| q操作,即p任务执行不成功,则执行q任务
尖叫提示:注意,每一个感叹号后边,有分号结束(linux环境运行)
当然啦,各个技术栈有各个技术栈的优势和存在的意义。如果不触摸到某个领域的边缘,你是不会知道这个世间的锋利。所以,没必要把scala升华到多牛逼的境界。任何技术栈都有局限,局限在于你是否知道他的局限到底在哪。大道至简。我这样抬高scala,会让人以为,其他框架组件如此无用,对吧。
scala可以获取当前系统时间,可以控制linux系统,这种功能几乎所有语言都可以简单做到。无法达到专门拿出来吹嘘的标准啊,让人无法信服scala确实牛逼,看你目的了,你要是说,我就要凸显scala牛逼,那这样说,显不出来。如果你要说scala可以做这些功能,那没问题。
scala可以获取当前系统时间,可以控制linux系统,这种功能几乎所有语言都可以简单做到。无法达到专门拿出来吹嘘的标准啊,让人无法信服scala确实牛逼
主要我看你语气和措辞是想让大家觉得这些功能牛逼到可怕
scala进程还可以提供
p #&& q操作,即p任务执行成功后,则执行q任务。
p #|| q操作,即p任务执行不成功,则执行q任务。
"ls -al /"
既然这么强大,那么crontab + scala + shell
,就完全不需要使用oozie了。
网友评论