执行Shell脚本时需要注意的几项(本人理解,大家有不同的意见欢迎补充):
1、可以获取脚本输出到控制台的内容,不能够直接获取return的值;
2、 如果不知道服务器上脚本是否有可执行权限,可以通过“sh 脚本”执行;
3、如果脚本有参数,在参数上加上双引号防止参数值为空情况;
4、如果脚本需要限定目录执行,可以通过“cd 目录 && sh 脚本”执行;
直接提供本人在项目中写的Shell脚本工具类,代码如下:
package util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; import org.apache.log4j.Logger; /** * Shell脚本工具类 * * @author Jinlong Wu * @version * @since */ public class ShellUtil { /** * 日志实例 */ private static Logger log = Logger.getLogger(ShellUtil.class); /** * Shell类型 */ public static final String SHELL_TYPE = "/bin/sh"; /** * 线程等待超时时间 */ public static final long PROCESS_TIMEOUT = 3000; /** * * 执行Shell脚本 * * @author Jinlong Wu * @param shellScript * Shell脚本 * @return 脚本执行结果 */ public static String exec(String shellScript) { return exec(shellScript, PROCESS_TIMEOUT); } /** * * 执行Shell脚本 * * @author Jinlong Wu * @param shellScript * Shell脚本 * @param timeout * 脚本执行等待时间 * @return 脚本执行结果 */ public static String exec(String shellScript, long timeout) { // 命令执行失败,默认返回-1 String result = "-1"; // 命令执行线程数据读取器 BufferedReader br = null; try { // 执行Shell脚本 Process process = Runtime.getRuntime().exec(new String[] {SHELL_TYPE, "-c", shellScript}); synchronized (process) { // 获取执行结果 br = new LineNumberReader(new InputStreamReader(process .getInputStream())); // 等待线程响应结果 process.wait(timeout); // 读取脚本执行结果 StringBuffer sb = new StringBuffer(); String line; while ((line = br.readLine()) != null) { sb.append(line); } result = sb.toString(); } } catch (IOException e) { log.error("Execute the script[" + shellScript + "] failed.", e); } catch (InterruptedException e) { log.error("Execute the script[" + shellScript + "] failed.", e); } finally { if(null != br) { try { br.close(); } catch (Exception e) { log.error(e); } } } return result; } /** * * 执行Shell脚本 * * @author Jinlong Wu * @param shellScript * Shell脚本 * @param timeout * 脚本执行等待时间 * @param paras * 脚本参数 * @return 脚本执行结果 */ public static String exec(String shellScript, long timeout, String... paras) { StringBuffer sb = new StringBuffer(); sb.append(shellScript); if (null != paras && paras.length > 0) { for (String str : paras) { sb.append(" ").append("\"").append(str).append("\""); } } return exec(sb.toString(), timeout); } /** * * 执行Shell脚本 * * @author Jinlong Wu * @param shellScript * Shell脚本 * @param paras * 脚本参数 * @return 脚本执行结果 */ public static String exec(String shellScript, String... paras) { StringBuffer sb = new StringBuffer(); sb.append(shellScript); if (null != paras && paras.length > 0) { for (String str : paras) { sb.append(" ").append("\"" + str + "\""); } } return exec(sb.toString()); } }
相关推荐
java调用shell 包含简单的编写shell文件 调用含有参数的shell文件
java调用shell脚本java调用shell脚本java调用shell脚本java调用shell脚本java调用shell脚本java调用shell脚本
在Java程序中调用Unix/Linux主机上的Shell命令,并返回相应执行结果。
利用Runtime.execute方法,我们可以在Java程序中运行Linux的Shell脚本,或者执行其他程序
在java代码中调用执行shell脚本,sqlldr导数与使用sqlplus在shell调用执行存储过程。 linux环境中有2个dba的用户:oracle、erm 还有1个web用户:erm 在linux环境中,这三个用户都可以直接在任意目录下执行该shell...
shell,bat脚本运行java程序, shell,bat脚本运行java程序,
shell脚本启动Java程序测试工程
详细的linux shell脚本启动java代码类。
linux中java项目需要重启一般使用先找到进程杀掉进程,然后找到项目启动,整个过程不算复杂,但是每次都操作一遍太麻烦,我这里把这个过程整理成shell脚本,大家可以修改里面项目名称,每次直接执行这个命令重启项目...
cat /mnt/log_function.sh #!/bin/bash #log function ####log_correct函数打印正确的输出到日志文件 function log_correct () { DATE=`date “+%Y-%m-%d %H:%M:%S”` ####显示打印日志的时间...log_error打印shell脚本
该工具包可实现远程调用Shell脚本,可帮助您轻松实现java远程调用Shell脚本
在开发过程中经常会员到在Linux环境中使用Shell脚本启动和停止java程序的情况,常用的java -jar命令只能运行jar文件,有很多不方便的地方,一旦代码修改就需要重新编辑打包,其实还有很多其他的方式,这个资源中包含...
linux shell脚本启动java。 ---------------------------------------- Windows编辑的sh,在linux会报错: shell unexpected end of file 解决办法: vim test.sh :set fileformat=unix :wq ----------------------...
我们选择后一种,即当完成外币资金的调度工作后,用Java的OutputStreamWriter来生成一个Txt文件,然后用Java来调用Shell脚本,在Shell脚本中完成FTP文件到Kondor系统的工作。
主要介绍了Java调用linux shell脚本的方法,需要的朋友可以参考下
java执行shell或bat脚本,Java可以使用三种方式来执行.bat或.shell脚本文件:使用Runtime.exec()、使用ProcessBuilder、使用第三方工具包commonsexec.jar
第一次接触linux系统,之前写的数据导出不好使了。...找了好多资料,最后决定写个shell脚本;没接触过shell脚本,网上大部分例子都写的挺复杂的;贴个简单的,不带传参什么的;只是最简单的数据表的导出备份
java连接服务器,并执行Linux服务器上的命令或脚本
常用shell脚本, Dos攻击防范(自动屏蔽攻击IP).sh 一键部署等等 Linux系统发送告警脚本.sh MySQL数据库备份单循环.sh MySQL数据库备份多循环.sh nginx 访问访问日志按天切割.sh nginx.conf nginx访问日志分析...