`
wujingenli
  • 浏览: 90860 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JAVA执行Shell脚本

    博客分类:
  • JAVA
 
阅读更多

执行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(包含有参数的调用)

    java调用shell 包含简单的编写shell文件 调用含有参数的shell文件

    java调用shell脚本

    java调用shell脚本java调用shell脚本java调用shell脚本java调用shell脚本java调用shell脚本java调用shell脚本

    Java调用Shell脚本代码

    在Java程序中调用Unix/Linux主机上的Shell命令,并返回相应执行结果。

    java运行shell脚本方法示例

    利用Runtime.execute方法,我们可以在Java程序中运行Linux的Shell脚本,或者执行其他程序

    java调用shell脚本执行sqlldr与存储过程

    在java代码中调用执行shell脚本,sqlldr导数与使用sqlplus在shell调用执行存储过程。 linux环境中有2个dba的用户:oracle、erm 还有1个web用户:erm 在linux环境中,这三个用户都可以直接在任意目录下执行该shell...

    shell,bat脚本运行java程序

    shell,bat脚本运行java程序, shell,bat脚本运行java程序,

    shell脚本启动Java程序测试工程

    shell脚本启动Java程序测试工程

    linux shell脚本启动java类

    详细的linux shell脚本启动java代码类。

    重启java程序shell脚本

    linux中java项目需要重启一般使用先找到进程杀掉进程,然后找到项目启动,整个过程不算复杂,但是每次都操作一遍太麻烦,我这里把这个过程整理成shell脚本,大家可以修改里面项目名称,每次直接执行这个命令重启项目...

    输出执行操作和打印日志的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脚本

    java 远程调用Shell脚本客户端包

    该工具包可实现远程调用Shell脚本,可帮助您轻松实现java远程调用Shell脚本

    Shell脚本通过Java class文件启停Java程序源码(脚本及源码)

    在开发过程中经常会员到在Linux环境中使用Shell脚本启动和停止java程序的情况,常用的java -jar命令只能运行jar文件,有很多不方便的地方,一旦代码修改就需要重新编辑打包,其实还有很多其他的方式,这个资源中包含...

    linux系统Shell脚本运行java项目。

    linux shell脚本启动java。 ---------------------------------------- Windows编辑的sh,在linux会报错: shell unexpected end of file 解决办法: vim test.sh :set fileformat=unix :wq ----------------------...

    Java 调用 Shell 命令

    我们选择后一种,即当完成外币资金的调度工作后,用Java的OutputStreamWriter来生成一个Txt文件,然后用Java来调用Shell脚本,在Shell脚本中完成FTP文件到Kondor系统的工作。

    Java调用linux shell脚本的方法

    主要介绍了Java调用linux shell脚本的方法,需要的朋友可以参考下

    java执行shell或bat脚本

    java执行shell或bat脚本,Java可以使用三种方式来执行.bat或.shell脚本文件:使用Runtime.exec()、使用ProcessBuilder、使用第三方工具包commonsexec.jar

    linux下shell脚本实现数据的导出

    第一次接触linux系统,之前写的数据导出不好使了。...找了好多资料,最后决定写个shell脚本;没接触过shell脚本,网上大部分例子都写的挺复杂的;贴个简单的,不带传参什么的;只是最简单的数据表的导出备份

    java连接Linux执行shell脚本,命令

    java连接服务器,并执行Linux服务器上的命令或脚本

    常用shell 脚本,dos攻击防范,

    常用shell脚本, Dos攻击防范(自动屏蔽攻击IP).sh 一键部署等等 Linux系统发送告警脚本.sh MySQL数据库备份单循环.sh MySQL数据库备份多循环.sh nginx 访问访问日志按天切割.sh nginx.conf nginx访问日志分析...

Global site tag (gtag.js) - Google Analytics