`

使用Java来写shell

阅读更多

     从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用。深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一。

 

    虽然SHELL比之系统编程语言要弱一些,简单一些,但是写好的SHELL程序,也是不容易的,对做Java编程的工程师来讲,要再去学习一门SHELL语言,呵呵。但是你可能没有想过,其实,你完全可以使用Java来写Shell,这样,不但不用再学新的语言,你和别人之前写好的类库,都可以非常轻松的派上用场喽。

 

   怎样搭建这样的环境呢?很简单,请看下面的步骤:

 

首先,你当然需要下载和安装Java环境,建议直接1.6之上的版本吧。安装好即可(例如在/opt/java1.6.0目录)。

 

第二,需要到www.beanshell.org下载一个小小的类库beanshell,只有一个jar包,放到一个目录(例如/opt/beanshell/beanshell.jar)即可。然后需要配置一个OS的环境变量CLASSPATH,把beanshell的jar配置在CLASSPATH中。

 (其实,beanshell还有很多丰富的功能,大家有空可以好好研究一下,哈)

 

第三,编写shell,不知道大家注意过一般shell的第一行没有,一般都是:

 

#!/bin/sh

 

符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程 序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。后续的部分就是主程序

 

如果是后边的shell语句是java,那就需要指明,后面的语句,都是要beanshell来解释执行,写成:

 


#!/usr/java/bin/java bsh.Interpreter

bsh.Interpreter就是beanshell里边的类。我们千万记住,先配置一个OS的环境变量CLASSPATH,把beanshell的jar配置在CLASSPATH中。好像直接在java后边写-classpath不行,不知道为什么。

 

或者写成

 

#!/bin/sh
//bin/true; exec java bsh.Interpreter "$0" "$@"

 

第四,写Shell的内容

 

在shell的后边,写java语句即可,需要注意的是,你如果打算使用beanshell jar包之外的类,先把包配置到CLASSPATH里就行。在beanshell中,也可以动态向classpath中添加内容,这里就不介绍了,有兴趣的可以自己看文档。

 

第五,执行shell

 

和其它shell一样,在命令行上执行即可。例如

 

./shelltest.sh

 

第六 参数传递

 

有参数的情况也一样,直接在脚本后写参数即可

 

./append2file.sh  "aaaa" test.txt

 

shell里边,使用bsh.args[0]、bsh.args[1]取出参数即可。

 

示例,向一个文件中添加一句话:

 

#!/opt/jdk1.6.0_37/jre/bin/java bsh.Interpreter

import java.io.*;
System.out.println(bsh.args[0]);
System.out.println(bsh.args[1]);
try{
        FileOutputStream fos = new FileOutputStream(bsh.args[0],true);//append=true
        fos.write(bsh.args[1].getBytes());
        fos.close();
}catch(Exception ex){
//...
}
System.out.println("------append ok-----");

 

 

而且,这个shell还可以和shell语言相互调用,怎么样,很方便吧。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics