现在的位置: 首页 > 综合 > 正文

Linux系统下高级语言调用shell脚本

2018年05月23日 ⁄ 综合 ⁄ 共 1873字 ⁄ 字号 评论关闭

1.Java调用shell
 

 Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)提供了一个允许Java程序与该程序所运行的环境交互的接口,这就是Runtime类,在Runtime类里提供了获取当前运行环境的接口。其中的exec函数返回一个执行shell命令的子进程。exec函数的具体实现形式有以下几种:
  
public Process exec(String command) throws IOException
public Process exec(String command,String[] envp) throwsIOException
public Process exec(String command,String[] envp,File dir) throwsIOException
public Process exec(String[] cmdarray) throws IOException
public Process exec(String[] cmdarray, String[] envp) throwsIOException
public Process exec(String[] cmdarray, String[] envp,File dir)throws IOException
 
  我们在这里主要用到的是第一个和第四个函数,具体方法很简单,就是在exec函数中传递一个代表命令的字符串。exec函数返回的是一个Process类型的类的实例。Process类主要用来控制进程,获取进程信息等作用。(具体信息及其用法请参看Java doc)。
 
1)执行简单的命令的方法:
代码如下:
       try
       {
           String commands = "ls -l";
           Process process = Runtime.getRuntime().exec (commands);
           // for showing the info on screen
           InputStreamReader ir=newInputStreamReader(process.getInputStream());
           BufferedReader input = new BufferedReader (ir);
           String line;
           while ((line = input.readLine ()) != null){
               System.out.println(line);
           }
       }//end try
       catch (java.io.IOException e){
           System.err.println ("IOException " + e.getMessage());
       }

  上面的代码首先是声明了一个代表命令的字符串commands,它代表了ls -l这个命令。之后我们用Runtime.getRuntime().exec(commands)来生成一个子进程来执行这个命令,如果这句话运行成功,则命令 ls -l 运行成功(由于没有让它显示,不会显示ls -l的结果)。后面的流操作则是获取进程的流信息,并把它们一行行输出到屏幕。

2)执行带有参数的命令(尤其是参数需要用引号的)时则需要用String的数组来表示整个命令,而且要用转义符把引号的特殊含义去除,例如我们要执行find / -name "*mysql*" -print 时,用如下代码
       try
       {
           String[] commands = newString[]{"find",".","-name","*mysql*","-print"};
           Process process = Runtime.getRuntime().exec (commands);
           InputStreamReader ir=newInputStreamReader(process.getInputStream());
           BufferedReader input = new BufferedReader (ir);
           String line;
           while ((line = input.readLine ()) != null){
           

抱歉!评论已关闭.