如何在java中执行shell脚本

如何在java中执行shell脚本,第1张

// 用法:RuntimegetRuntime()exec("命令");
String shpath="/test/testsh"; //程序路径
Process process =null;
String command1 = “chmod 777 ” + shpath;
try {
RuntimegetRuntime()exec(command1 )waitFor();
} catch (IOException e1) {
e1printStackTrace();
}catch (InterruptedException e) {
eprintStackTrace();
}
String var="201102"; /参数
String command2 = “/bin/sh ” + shpath + ” ” + var;
RuntimegetRuntime()exec(command2)waitFor();

java 类名 参数1 参数2
你说的这么有点不明不白,javaweb程序要通过bat运行?那么javaweb程序是什么功能?自己写的web服务器吗还是什么?另外批处理里要进行那些处理?

这里不得不提到java的process类了。
process这个类是一个抽象类,封装了一个进程(你在调用linux的命令或者shell脚本就是为了执行一个在linux下执行的程序,所以应该使用process类)。
process类提供了执行从进程输入,执行输出到进程,等待进程完成,检查进程的推出状态,以及shut down掉进程。
至于详细的process类的介绍放在以后介绍。
另外还要注意一个类:Runtime类,Runtime类是一个与JVM运行时环境有关的类,这个类是Singleton的。
这里用到的RuntimegetRuntime()方法是取得当前JVM的运行环境,也是java中唯一可以得到运行环境的方法。(另外,Runtime的大部分方法都是实例方法,也就是说每次运行调用的时候都需要调用到getRuntime方法)
下面说说Runtime的exec()方法,这里要注意的有一点,就是public Process exec(String [] cmdArray, String [] envp);这个方法中cmdArray是一个执行的命令和参数的字符串数组,数组的第一个元素是要执行的命令往后依次都是命令的参数,envp感觉应该和C中的execve中的环境变量是一样的,envp中使用的是name=value的方式。
下面说一下,如何使用process来调用shell脚本
例如,我需要在linux下实行linux命令:sh testsh,下面就是执行testsh命令的方法:
这个var参数就是日期这个201102包的名字。
String shpath="/test/testsh"; //程序路径
Process process =null;
String command1 = “chmod 777 ” + shpath;
process = RuntimegetRuntime()exec(command1);
processwaitFor();
String var="201102"; //参数
String command2 = “/bin/sh ” + shpath + ” ” + var;
RuntimegetRuntime()exec(command2)waitFor();
注意:
1
我为什么要使用 chmod 777命令呢?在有的机器上面,可能没有设置权限问题。这是你在linux下面执行shell脚本需要注意的问题。没有的话,就需要添加权限,就用chmod 777,否则在执行到RuntimegetRuntime()exec的时侯会出现Permission denied错误。
2
waitFor()这个也是必不可缺的,如果你需要执行多行命令的话,把waitFor()这个加上。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13480137.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-15
下一篇 2023-08-15

发表评论

登录后才能评论

评论列表(0条)

保存