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.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"]

如有疑问欢迎留言

最新文章

  1. linux黄金命令[积累中]
  2. Linux 命令积累
  3. android中如何在低版本(5.0之前)上使用tint(着色)属性
  4. Mariadb 数据库写入中文乱码问题
  5. Android Studio进行NDK编程
  6. POJ Wormholes (SPFA)
  7. 【转】使用dos2unix批量转换文件
  8. [Python] 文科生零基础学编程系列一——对象、集合、属性、方法的基本定义
  9. java HotSpot 内存管理白皮书
  10. asp.net core 系列之并发冲突
  11. asp.net DES加密解密
  12. jdk安装及配置
  13. 提示-bash: telnet: command not found的解决方法
  14. 【原创】Linux基础之Shell脚本常用命令
  15. 201621123001 《Java程序设计》第10周学习总结
  16. subprocess(子进程模块)
  17. C语言基础:枚举.宏 分类: iOS学习 c语言基础 2015-06-10 22:01 20人阅读 评论(0) 收藏
  18. angularjs中factory, service和provider
  19. django-admin管理后台高级自定义
  20. Matlab结构体定义

热门文章

  1. 数据准备&lt;5&gt;:变量筛选-实战篇
  2. 问题记录:未设置为接受端口“文件和打印机共享(SMB)”上的连接
  3. [USACO11DEC]Grass Planting
  4. linux中的文件编码及编码修改
  5. hdoj 4272 LianLianKan 数据太水
  6. .net mvc控制器传递方法到视图
  7. interfacer和abstarct class的异同
  8. CentOS 6.9配置EPEL源
  9. 用zrender实现工作流图形化设计(附范例代码)
  10. PHPExcel 导出2003和2007的excel文档实例