Java程序调用带参数的shell脚本返回值

原创 2017年01月04日 21:07:20

Java程序调用带参数的shell脚本返回值

首先来看看linux中shell变量($#,$@,$0,$1,$2)的含义解释
变量说明:

  • $$
    Shell本身的PID(ProcessID)
  • $!
    Shell最后运行的后台Process的PID
  • $?
    最后运行的命令的结束代码(返回值)
  • $-
    使用Set命令设定的Flag一览
  • $*
    所有参数列表。如”$*”用「”」括起来的情况、以”$1 $2 … $n”的形式输出所有参数。
  • $@
    所有参数列表。如”$@”用「”」括起来的情况、以”\$1” “\$2” … “\$n” 的形式输出所有参数。
  • $#
    添加到Shell的参数个数 $0 Shell本身的文件名 $1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

Java程序调用带参数的shell脚本返回值实现具体代码

package com.javen.kit;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.List;

public class ShellKit {
    /**
     * 运行shell脚本
     * @param shell 需要运行的shell脚本
    */
    public static  void execShell(String shell) {
        try {
            Runtime rt = Runtime.getRuntime();
            rt.exec(shell);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 运行shell
     *
     * @param shStr
     * 需要执行的shell
     * @return
     * @throws IOException
     * 注:如果sh中含有awk,一定要按new String[]{"/bin/sh","-c",shStr}写,才可以获得流.
     */
    public static  List<String> runShell(String shStr) throws Exception {
        List<String> strList = new ArrayList<String>();

        Process process;
        process = Runtime.getRuntime().exec(new String[] {"/bin/sh","-c",shStr},null,null);
        InputStreamReader ir = new InputStreamReader(process
                .getInputStream());
        LineNumberReader input = new LineNumberReader(ir);
        String line;
        process.waitFor();
        while ((line = input.readLine()) != null) {
            strList.add(line);
        }

        return strList;
    }
}

例子

假设有一个shell脚本文件test.sh,有两个参数parm1,parm2,java调用的方法如下:

String[] cmd = {"/bin/sh","-c","test.sh parm1 parm2"}; 
Runtime.getRuntime().exec(cmd); 

上面的ShellKit.java就是对该方法的封装

test.sh

#!/bin/sh
#Author : Javen

printf "The complete list is %s\\n" "$$"
printf "The complete list is %s\\n" "$!"
printf "The complete list is %s\\n" "$?"
printf "The complete list is %s\\n" "$*"
printf "The complete list is %s\\n" "$@"
printf "The complete list is %s\\n" "$#"
printf "The complete list is %s\\n" "$0"
printf "The complete list is %s\\n" "$1"
printf "The complete list is %s\\n" "$2

服务器测试

[root@iZ94hjirr10Z software]# ./test.sh Javen205 572839485
The complete list is 15409
The complete list is
The complete list is 0
The complete list is Javen205 572839485
The complete list is Javen205
The complete list is 572839485
The complete list is 2
The complete list is ./test.sh
The complete list is Javen205
The complete list is 572839485

程序调用

public class ShellController extends Controller {

    public void index(){
        String shell = getPara("shell");
        ShellKit.execShell(shell);
        renderText("执行完成...");
    }


    public void runShell(){
        String shStr = getPara("shell");
        try {
            List<String> list = ShellKit.runShell(shStr);
            renderJson(list);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }



}

浏览器测试 并返回结果

http://120.xxx:8080/Demo/shell/runShell?shell=/home/software/test.sh      Javen205 572839485

浏览器测试 不返回结果

http://120.xxx:8080/Demo/shell?shell=/home/software/test.sh       Javen205 572839485

返回结果

["The complete list is 15416","The complete list is ","The complete list is 0","The complete list is Javen205 572839485","The complete list is Javen205","The complete list is 572839485","The complete list is 2","The complete list is /home/software/test.sh","The complete list is Javen205","The complete list is 572839485"]

如有疑问欢迎留言

版权声明:本文为博主原创文章,欢迎转载,转载标明出处(http://blog.csdn.net/zyw_java)。微信公众号:javenlife

java调用shell脚本并传递参数

最近业务上需要java调用执行shell脚本进行一些业务处理,写了个demo,记录下。 主要代码 @RequestMapping("/copy/database") @Response...

java调用shell脚本并传参

private void invokeShell(String projectDirectory, String ipaOutputDirectory, String version, String ...
  • inrtyx
  • inrtyx
  • 2013年09月04日 13:29
  • 1565

Java调用shell脚本传带空格参数

我们知道传递给shell脚本的参数是以空格分开的,如果参数中有空格该怎么处理呢? 在Java程序中可以调用shell脚本来完成一些与Linux系统相关度较高的工作,其调用方式主要可以有以下两种: 1....

Java调用Shell命令和脚本

1.介绍 有时候我们在Linux中运行Java程序时,需要调用一些Shell命令和脚本。而Runtime.getRuntime().exec()方法给我们提供了这个功能,而且...

shell脚本以及java调用shell并传参

在者就是java中怎样调用shell脚本 及怎样给shell传参 网上找到好几种写法(实质都是Runtime.getRuntime().exec();方法不同重载形式):' v- a9 g, r/...

java调用shell获取返回值

1.shell文件return.sh echo 1 echo 2 echo 3 2.java文件Test.java import java.io.BufferedInp...

Java 调用 shell 脚本详解

这一年的项目中,有大量的场景需要Java 进程调用 Linux的bash shell 脚本实现相关功能。 从之前的项目中拷贝的相关模块和网上的例子来看,有大量的“陷阱”造成调用shell 脚本在某些特...

Java运行系统命令行并获取返回值

URL:http://accptlq.iteye.com/blog/1490890 方法一 //Process p = Runtime.getRuntime().exec("ping 127...

shell 参数,shell与Java 交互参数

parx="XXXXXXXXXX" pary="YYYYYYYYYYYYY" fodler和ver_file分别是调用 test.sh时的第一个和第二个参数,如下调用  test...

shell 脚本调去java 获取java的返回值

这里将的返回值指的是JVM退出的状态,大家都知道:JVM正常退出返回0,非0的都是非正常退出、 java代码 public class Test { public static void mai...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java程序调用带参数的shell脚本返回值
举报原因:
原因补充:

(最多只允许输入30个字)