Java程序调用带参数的shell脚本返回值
2017-01-04 21:07
393 查看
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"]
如有疑问欢迎留言
相关文章推荐
- Java程序调用带参数的shell脚本返回值
- Java程序调用带参数的shell脚本返回值
- PHP中调用外部程序,及其参数与返回值
- JNI实现回调| JNI调用JAVA函数|参数和返回值的格式
- Oracle-存储过程-参数为数组-返回值为集合,java-调用存储过程
- java中静态,有无返回值,有无参数及调用方法
- Java加载jar文件并调用jar文件当中有参数和返回值的方法
- PHP中system,exec调用外部程序,及其参数与返回值 (转)
- JAVA程序调用MYSQL带有OUTPUT参数的存储过程
- 工作随笔——Java调用Groovy类的方法、传递参数和获取返回值
- PHP中调用外部程序,及其参数与返回值
- 有关java的函数调用返回值的问题和参数传递问题
- JAVA程序调用MYSQL带有OUTPUT参数的存储过程
- java 利用jacob调用ocx控件时怎么处理带返回值的参数?
- java调用其它程序之返回值
- JNI实现回调| JNI调用JAVA函数|参数和返回值的格式
- JAVA 通过 JNA 调用 C程序 dll 函数传入中文参数问题
- cocos2dx 调用 java 参数、返回值样式对照表
- 如何在java程序中调用linux命令或者shell脚本
- 工作随笔——Java调用Groovy类的方法、传递参数和获取返回值