执行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脚本执行特定的操作,比如访问Linux系统命令或者自动化执行一些任务。本文将详细解释Java如何调用Shell脚本,包括如何编写Shell脚本和在Java中如何传递参数。 首先,Shell脚本...
本文将详细讲解如何在Java中使用`Runtime.execute`方法运行Shell脚本,并提供一个示例。 `Runtime.getRuntime().exec()`方法允许我们在Java程序中执行外部命令或脚本。这个方法有多种重载形式,但基本用法是传入一...
IDEA中编写并运行shell脚本的实现 IDEA中编写并运行shell脚本的实现是指在Integrated Development Environment(IDE)中编写、配置和运行shell脚本的过程。该过程需要安装bashsupport插件,配置插件,安装git软件,...
在Java程序中调用Unix/Linux主机上的Shell命令,并返回相应执行结果。
在java代码中调用执行shell脚本,sqlldr导数与使用sqlplus在shell调用执行存储过程。 linux环境中有2个dba的用户:oracle、erm 还有1个web用户:erm 在linux环境中,这三个用户都可以直接在任意目录下执行该shell...
下面将详细介绍如何使用shell脚本(适用于Unix/Linux系统)和bat脚本(适用于Windows系统)来运行Java程序。 **shell脚本运行Java程序** 在Unix/Linux环境中,我们可以创建一个.sh文件作为shell脚本来执行Java程序...
首先,Java通过Runtime类或ProcessBuilder类可以执行外部程序,包括Shell脚本。`Runtime.getRuntime().exec()`方法是较早期的调用方式,而`ProcessBuilder`则是在Java 5之后引入的,提供更灵活的进程控制。 1. **...
当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。 在某些情况下,你也许想要知道运行中的子shell的PID。这个PID...
在IT行业中,shell脚本是Linux或Unix操作系统中的一种强大工具,用于自动化任务执行和系统管理。当涉及到启动Java应用程序时,shell脚本可以提供一个方便、可重复且灵活的方法。下面我们将深入探讨如何使用shell脚本...
因此,要在Android上运行shell脚本,我们通常需要通过Java代码来间接实现。 1. **使用Runtime类**:这是最基础的方法,通过`Runtime.getRuntime().exec()`方法执行shell命令。例如: ```java Process process = ...
确保执行的用户拥有足够的权限来运行Shell脚本。 - 如果在执行过程中出现权限错误,请检查脚本的权限设置是否正确,或者尝试以其他用户身份运行Java程序。 3. **输入输出流处理**: - 使用`LineNumberReader`可以...
在Java编程中,有时我们需要与操作系统进行交互,执行一些系统级别的任务,比如自动化运维、文件管理等,这时就可能需要用到调用Shell脚本。本文将详细介绍如何在Java中完美封装shell脚本的调用方法,并提供相关的...
详细的linux shell脚本启动java代码类。
在IT行业中,Java是一种广泛应用的编程语言,而Shell脚本则是Linux或Unix系统中的命令行脚本,用于自动化执行一系列任务。将Java与Shell脚本结合使用,可以在Java应用程序中执行系统级操作或者调用复杂的命令行流程...
linux中java项目需要重启一般使用先找到进程杀掉进程,然后找到项目启动,整个过程不算复杂,但是每次都操作一遍太麻烦,我这里把这个过程整理成shell脚本,大家可以修改里面项目名称,每次直接执行这个命令重启项目...
自启动shell脚本和CPU、内存占用监控脚本能确保Java服务在系统启动时自动运行,并实时监测其性能状态,以便及时发现和处理潜在问题。下面将详细介绍这两个方面的内容。 一、Linux系统Java服务自启动shell脚本 自...
运行Shell脚本,使用`./InitData.sh`命令。如果一切配置正确,你将在终端看到"Hello, World!"的输出。 在实际应用中,可能会有更复杂的Java程序,例如需要传递参数、处理异常等。在Shell脚本中,你可以通过`java`...
接下来是关键部分——如何使用Java程序来执行Shell脚本。以下是一个具体的实现步骤: 1. **准备Shell脚本**:首先需要有一个已经写好的Shell脚本(例如`sendKondorFile.sh`),该脚本用于完成文件的FTP上传等操作。...
为了使Java代码能够成功执行shell脚本,需要注意以下几点: - 确保Java运行环境有执行`sh`命令的权限。 - 脚本路径正确且Java程序有读取该文件的权限。 - `oracle`用户有执行`exp`命令和写入指定文件的权限。 总结...