`
wujingenli
  • 浏览: 91773 次
  • 性别: 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脚本执行特定的操作,比如访问Linux系统命令或者自动化执行一些任务。本文将详细解释Java如何调用Shell脚本,包括如何编写Shell脚本和在Java中如何传递参数。 首先,Shell脚本...

    java运行shell脚本方法示例

    本文将详细讲解如何在Java中使用`Runtime.execute`方法运行Shell脚本,并提供一个示例。 `Runtime.getRuntime().exec()`方法允许我们在Java程序中执行外部命令或脚本。这个方法有多种重载形式,但基本用法是传入一...

    IDEA中编写并运行shell脚本的实现

    IDEA中编写并运行shell脚本的实现 IDEA中编写并运行shell脚本的实现是指在Integrated Development Environment(IDE)中编写、配置和运行shell脚本的过程。该过程需要安装bashsupport插件,配置插件,安装git软件,...

    Java调用Shell脚本代码

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

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

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

    shell,bat脚本运行java程序

    下面将详细介绍如何使用shell脚本(适用于Unix/Linux系统)和bat脚本(适用于Windows系统)来运行Java程序。 **shell脚本运行Java程序** 在Unix/Linux环境中,我们可以创建一个.sh文件作为shell脚本来执行Java程序...

    java调用shell脚本

    首先,Java通过Runtime类或ProcessBuilder类可以执行外部程序,包括Shell脚本。`Runtime.getRuntime().exec()`方法是较早期的调用方式,而`ProcessBuilder`则是在Java 5之后引入的,提供更灵活的进程控制。 1. **...

    Shell脚本中获取进程ID的方法

    当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。 在某些情况下,你也许想要知道运行中的子shell的PID。这个PID...

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

    在IT行业中,shell脚本是Linux或Unix操作系统中的一种强大工具,用于自动化任务执行和系统管理。当涉及到启动Java应用程序时,shell脚本可以提供一个方便、可重复且灵活的方法。下面我们将深入探讨如何使用shell脚本...

    android系统中调用shell脚本

    因此,要在Android上运行shell脚本,我们通常需要通过Java代码来间接实现。 1. **使用Runtime类**:这是最基础的方法,通过`Runtime.getRuntime().exec()`方法执行shell命令。例如: ```java Process process = ...

    java调用Shell脚本.doc

    确保执行的用户拥有足够的权限来运行Shell脚本。 - 如果在执行过程中出现权限错误,请检查脚本的权限设置是否正确,或者尝试以其他用户身份运行Java程序。 3. **输入输出流处理**: - 使用`LineNumberReader`可以...

    java调用shell脚本完美封装

    在Java编程中,有时我们需要与操作系统进行交互,执行一些系统级别的任务,比如自动化运维、文件管理等,这时就可能需要用到调用Shell脚本。本文将详细介绍如何在Java中完美封装shell脚本的调用方法,并提供相关的...

    linux shell脚本启动java类

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

    Java调用shell脚本

    在IT行业中,Java是一种广泛应用的编程语言,而Shell脚本则是Linux或Unix系统中的命令行脚本,用于自动化执行一系列任务。将Java与Shell脚本结合使用,可以在Java应用程序中执行系统级操作或者调用复杂的命令行流程...

    重启java程序shell脚本

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

    linux系统java服务自启动shell脚本及服务cpu内存占用监控脚本

    自启动shell脚本和CPU、内存占用监控脚本能确保Java服务在系统启动时自动运行,并实时监测其性能状态,以便及时发现和处理潜在问题。下面将详细介绍这两个方面的内容。 一、Linux系统Java服务自启动shell脚本 自...

    shell 脚本调用Java类

    运行Shell脚本,使用`./InitData.sh`命令。如果一切配置正确,你将在终端看到"Hello, World!"的输出。 在实际应用中,可能会有更复杂的Java程序,例如需要传递参数、处理异常等。在Shell脚本中,你可以通过`java`...

    Java 调用 Shell 命令

    接下来是关键部分——如何使用Java程序来执行Shell脚本。以下是一个具体的实现步骤: 1. **准备Shell脚本**:首先需要有一个已经写好的Shell脚本(例如`sendKondorFile.sh`),该脚本用于完成文件的FTP上传等操作。...

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

    为了使Java代码能够成功执行shell脚本,需要注意以下几点: - 确保Java运行环境有执行`sh`命令的权限。 - 脚本路径正确且Java程序有读取该文件的权限。 - `oracle`用户有执行`exp`命令和写入指定文件的权限。 总结...

Global site tag (gtag.js) - Google Analytics