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

java调用linux中的shell脚本传递参数并返回执行结果

阅读更多

 

 

package cn.com.songjy.test.shell;
 
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
 
public class JavaShellUtil {
    // 基本路径
    private static final String basePath = "/root/";
 
    // 记录Shell执行状况的日志文件的位置(绝对路径)
    private static final String executeShellLogFile = basePath
            + "executeShell.log";
 
    // 发送文件到Kondor系统的Shell的文件名(绝对路径)
    private static final String sendKondorShellName = basePath
            + "songjy.sh";
 
    public int executeShell(String shellCommand) throws IOException {
        System.out.println("shellCommand:"+shellCommand);
        int success = 0;
        StringBuffer stringBuffer = new StringBuffer();
        BufferedReader bufferedReader = null;
        // 格式化日期时间,记录日志时使用
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS ");
 
        try {
            stringBuffer.append(dateFormat.format(new Date()))
                    .append("准备执行Shell命令 ").append(shellCommand)
                    .append(" \r\n");
            Process pid = null;
            String[] cmd = { "/bin/sh", "-c", shellCommand };
            //给shell传递参数
            //String[] cmd = { "/bin/sh", "-c", shellCommand+" paramater" };
            // 执行Shell命令
            pid = Runtime.getRuntime().exec(cmd);
            if (pid != null) {
                stringBuffer.append("进程号:").append(pid.toString())
                        .append("\r\n");
                // bufferedReader用于读取Shell的输出内容
                bufferedReader = new BufferedReader(new InputStreamReader(pid.getInputStream()), 1024);
                pid.waitFor();
            } else {
                stringBuffer.append("没有pid\r\n");
            }
            stringBuffer.append(dateFormat.format(new Date())).append(
                    "Shell命令执行完毕\r\n执行结果为:\r\n");
            String line = null;
            // 读取Shell的输出内容,并添加到stringBuffer中
            while (bufferedReader != null
                    && (line = bufferedReader.readLine()) != null) {
                stringBuffer.append(line).append("\r\n");
            }
            System.out.println("stringBuffer:"+stringBuffer);
        } catch (Exception ioe) {
            stringBuffer.append("执行Shell命令时发生异常:\r\n").append(ioe.getMessage())
                    .append("\r\n");
        } finally {
            if (bufferedReader != null) {
                OutputStreamWriter outputStreamWriter = null;
                try {
                    bufferedReader.close();
                    // 将Shell的执行情况输出到日志文件中
                    OutputStream outputStream = new FileOutputStream(executeShellLogFile);
                    outputStreamWriter = new OutputStreamWriter(outputStream, "UTF-8");
                    outputStreamWriter.write(stringBuffer.toString());
                    System.out.println("stringBuffer.toString():"+stringBuffer.toString());
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    outputStreamWriter.close();
                }
            }
            success = 1;
        }
        return success;
    }
 
    public static void main(String[] args) {
        try {
            new JavaShellUtil().executeShell(sendKondorShellName);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 

执行sh的内容如下:

#!/bin/sh

name=$1

echo "the ${name} are great man!"

 


给新创建的test.sh的脚本赋可执行权限,命令为“chmod 755 test.sh”。


执行'./test.sh "xiao wang"'命令,可以看到自己编写脚本的结果“the xiao wang are great man!”。


"name=$1"中$1为系统提供的位置参数,$0代表程序的名称,[$1/$2/...]从1开始为传递的参数。

linux系统除了提供位置参数还提供内置参数,内置参数如下: 

        $# ----传递给程序的总的参数数目  

      $? ----上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。   

         $* ----传递给程序的所有参数组成的字符串。   

        $n ----表示第几个参数,$1 表示第一个参数,$2 表示第二个参数 ...   $0 ----当前程序的名称   

         $@----以"参数1" "参数2" ... 形式保存所有参数   

         $$ ----本程序的(进程ID号)PID   

         $! ----上一个命令的PID

 

 

分享到:
评论

相关推荐

    java调用shell(包含有参数的调用)

    在这段代码中,我们创建了一个`Process`对象`ps`,通过`exec()`方法来执行Shell脚本`JZDZ.sh`,并传递了`bankNo`和`dzDate`两个参数。然后,我们通过`ps.waitFor()`等待脚本执行完成,并通过`BufferedReader`读取...

    使用runtime实现linux命令行或shell脚本多次调用

    在Java编程中,有时我们需要与操作系统进行交互,执行一些系统级别的任务,比如运行Linux命令或shell脚本。`Runtime`类是Java标准库提供的一种机制,允许我们在程序中执行操作系统命令。本文将深入探讨如何使用`...

    JAVA操作linux服务器,本文用于启动shell脚本并返回数据,简单易懂,可随时修改

    总之,通过Java操作Linux服务器并执行shell脚本,可以实现自动化运维、远程数据获取等多种功能。结合Apache Commons库,我们可以编写出高效、可靠的远程管理工具。在实际开发中,一定要注意安全性,例如使用密钥对...

    android系统中调用shell脚本

    在Android系统中,由于安全性和权限的限制,直接调用shell脚本并不像在Linux或Unix环境下那样简单。然而,对于非root用户来说,确实有一些方法可以实现对shell脚本的调用,尤其是在开发和调试过程中。下面我们将深入...

    java调用shell向DataX传递参数,where条件,包含特殊字符

    总之,Java调用shell脚本向DataX传递参数,尤其是在where条件中包含特殊字符时,需要关注字符串转义、shell命令构建以及安全问题。同时,合理设计和使用配置文件能有效提高代码的灵活性和可维护性。

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

    总的来说,Java远程调用Shell脚本客户端包简化了开发人员在Java应用程序中集成远程系统管理操作的过程,提高了开发效率并保证了安全性。通过理解和运用上述技术,开发者能够更好地利用这个工具包实现各种复杂的远程...

    shell 脚本调用Java类

    Shell脚本主要用于Linux或Unix系统中的自动化任务执行,而Java是一种跨平台的编程语言,广泛应用于企业级应用、大数据处理等领域。当需要将这两者结合时,通常是为了在Shell脚本中调用Java程序,实现更复杂的系统...

    java在win下启动bat和在linux下启动shell脚本

    在实际应用中,这种工具类可能还会有其他高级特性,例如添加超时机制、返回脚本的执行结果、支持参数传递给脚本等。通过这种方式,开发者可以在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,bat脚本运行java程序

    在Unix/Linux环境中,我们可以创建一个.sh文件作为shell脚本来执行Java程序。首先,确保系统已经安装了Java环境,可以通过`java -version`命令检查。然后,按照以下步骤编写脚本: 1. 使用文本编辑器(如vim、nano...

    java调用shell脚本完美封装

    然后在Java中调用这个脚本并传递参数,观察输出结果。 通过以上步骤,我们可以实现Java对Shell脚本的调用和封装,解决各种自动化任务的需求。在Linux环境下,这种方式尤其有用,因为Linux系统的许多操作可以通过...

    Java项目linux启动脚本以及日志分割安装软件

    2. **配置使用**:在Shell脚本中,可以将原本要写入单个日志文件的输出通过管道`|`传递给cronolog,如`your_command | cronolog /path/to/log/%Y%m%d.log`。这里的`%Y%m%d.log`表示按照年月日格式创建日志文件。 3. ...

    Shell执行/调用Java/Jar程序例子

    这篇博客“Shell执行/调用Java/Jar程序例子”探讨了如何使用Shell脚本来启动和控制Java应用程序,特别是JAR文件。这里我们将深入讲解相关知识点。 1. **Shell脚本基础** Shell脚本是Linux或Unix操作系统中的命令行...

    使用Linux-Shell转换PDF文件为图片

    `convertPdfToImg.sh`则是一个Shell脚本,它包含了调用jar包并执行转换的命令。而`说明.txt`是使用这些工具的指南,包含操作步骤和可能的参数说明。 转换过程可能如下: 1. **运行Shell脚本**:用户需要有执行权限...

    Java远程调用Shell脚本并获取输出信息【推荐】

    Java远程调用Shell脚本并获取输出信息 本文主要介绍了Java远程调用Shell脚本...本文介绍了Java远程调用Shell脚本并获取输出信息的方法,使用了Java的SSH客户端来连接远程Linux服务器,执行Shell脚本,并获取输出信息。

    Shell脚本通过参数名传递参数的实现代码

    在Shell脚本编程中,通常使用$1, $2, ... 这样的变量来接收命令行传入的参数。这种方式虽然简单,但当参数数量增多或参数含义复杂时,可能会导致代码难以理解和维护。为了解决这个问题,我们可以使用参数名来传递...

    java执行linux的SH文件

    标题中的“java执行linux的SH文件”指的是在Java程序中调用Linux系统中的Shell脚本进行执行。这通常涉及到Java的Runtime类或者ProcessBuilder类,它们可以用来与操作系统进行交互,执行外部命令。 1. **Java运行...

    linux下执行java程序的sh脚本下载

    ### Linux下执行Java程序的Shell脚本详解 #### 背景介绍 在Linux环境中运行Java应用程序时,经常需要通过shell脚本来启动Java程序。这种方式不仅便于自动化部署和管理,还可以根据需求灵活调整运行参数。本文将详细...

    linux 下的shell socket实现聊天室

    在Linux操作系统中,Shell脚本是一种强大的工具,可以用来编写自动化任务和简单的应用程序。当我们谈论“Linux下的Shell socket实现聊天室”时,我们实际上是在讨论如何利用Shell脚本结合socket编程来创建一个基本的...

    通过SSHPASS执行命令及相关脚本

    标题中的“通过SSHPASS执行命令及相关脚本”是指在Linux环境下使用`sshpass`工具进行非交互式SSH登录并执行远程命令的技术。`sshpass`是一个命令行实用程序,它允许用户在不手动输入密码的情况下,通过SSH连接执行...

Global site tag (gtag.js) - Google Analytics