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

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 runShell(String shStr) throws Exception {

List strList = new ArrayList();

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 list = ShellKit.runShell(shStr);

renderJson(list);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

浏览器测试 并返回结果

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

浏览器测试 不返回结果

http://120.76.45.85: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"]

如有疑问欢迎留言

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值