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
相关推荐
在这段代码中,我们创建了一个`Process`对象`ps`,通过`exec()`方法来执行Shell脚本`JZDZ.sh`,并传递了`bankNo`和`dzDate`两个参数。然后,我们通过`ps.waitFor()`等待脚本执行完成,并通过`BufferedReader`读取...
在Java编程中,有时我们需要与操作系统进行交互,执行一些系统级别的任务,比如运行Linux命令或shell脚本。`Runtime`类是Java标准库提供的一种机制,允许我们在程序中执行操作系统命令。本文将深入探讨如何使用`...
总之,通过Java操作Linux服务器并执行shell脚本,可以实现自动化运维、远程数据获取等多种功能。结合Apache Commons库,我们可以编写出高效、可靠的远程管理工具。在实际开发中,一定要注意安全性,例如使用密钥对...
在Android系统中,由于安全性和权限的限制,直接调用shell脚本并不像在Linux或Unix环境下那样简单。然而,对于非root用户来说,确实有一些方法可以实现对shell脚本的调用,尤其是在开发和调试过程中。下面我们将深入...
然后在Java中调用这个脚本并传递参数,观察输出结果。 通过以上步骤,我们可以实现Java对Shell脚本的调用和封装,解决各种自动化任务的需求。在Linux环境下,这种方式尤其有用,因为Linux系统的许多操作可以通过...
总之,Java调用shell脚本向DataX传递参数,尤其是在where条件中包含特殊字符时,需要关注字符串转义、shell命令构建以及安全问题。同时,合理设计和使用配置文件能有效提高代码的灵活性和可维护性。
总的来说,Java远程调用Shell脚本客户端包简化了开发人员在Java应用程序中集成远程系统管理操作的过程,提高了开发效率并保证了安全性。通过理解和运用上述技术,开发者能够更好地利用这个工具包实现各种复杂的远程...
Shell脚本主要用于Linux或Unix系统中的自动化任务执行,而Java是一种跨平台的编程语言,广泛应用于企业级应用、大数据处理等领域。当需要将这两者结合时,通常是为了在Shell脚本中调用Java程序,实现更复杂的系统...
在实际应用中,这种工具类可能还会有其他高级特性,例如添加超时机制、返回脚本的执行结果、支持参数传递给脚本等。通过这种方式,开发者可以在Java程序中灵活地调用操作系统级别的功能,实现更复杂的自动化流程。
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脚本
在Unix/Linux环境中,我们可以创建一个.sh文件作为shell脚本来执行Java程序。首先,确保系统已经安装了Java环境,可以通过`java -version`命令检查。然后,按照以下步骤编写脚本: 1. 使用文本编辑器(如vim、nano...
2. **配置使用**:在Shell脚本中,可以将原本要写入单个日志文件的输出通过管道`|`传递给cronolog,如`your_command | cronolog /path/to/log/%Y%m%d.log`。这里的`%Y%m%d.log`表示按照年月日格式创建日志文件。 3. ...
这篇博客“Shell执行/调用Java/Jar程序例子”探讨了如何使用Shell脚本来启动和控制Java应用程序,特别是JAR文件。这里我们将深入讲解相关知识点。 1. **Shell脚本基础** Shell脚本是Linux或Unix操作系统中的命令行...
`convertPdfToImg.sh`则是一个Shell脚本,它包含了调用jar包并执行转换的命令。而`说明.txt`是使用这些工具的指南,包含操作步骤和可能的参数说明。 转换过程可能如下: 1. **运行Shell脚本**:用户需要有执行权限...
Java远程调用Shell脚本并获取输出信息 本文主要介绍了Java远程调用Shell脚本...本文介绍了Java远程调用Shell脚本并获取输出信息的方法,使用了Java的SSH客户端来连接远程Linux服务器,执行Shell脚本,并获取输出信息。
在Shell脚本编程中,通常使用$1, $2, ... 这样的变量来接收命令行传入的参数。这种方式虽然简单,但当参数数量增多或参数含义复杂时,可能会导致代码难以理解和维护。为了解决这个问题,我们可以使用参数名来传递...
标题中的“java执行linux的SH文件”指的是在Java程序中调用Linux系统中的Shell脚本进行执行。这通常涉及到Java的Runtime类或者ProcessBuilder类,它们可以用来与操作系统进行交互,执行外部命令。 1. **Java运行...
### Linux下执行Java程序的Shell脚本详解 #### 背景介绍 在Linux环境中运行Java应用程序时,经常需要通过shell脚本来启动Java程序。这种方式不仅便于自动化部署和管理,还可以根据需求灵活调整运行参数。本文将详细...
在Linux操作系统中,Shell脚本是一种强大的工具,可以用来编写自动化任务和简单的应用程序。当我们谈论“Linux下的Shell socket实现聊天室”时,我们实际上是在讨论如何利用Shell脚本结合socket编程来创建一个基本的...
标题中的“通过SSHPASS执行命令及相关脚本”是指在Linux环境下使用`sshpass`工具进行非交互式SSH登录并执行远程命令的技术。`sshpass`是一个命令行实用程序,它允许用户在不手动输入密码的情况下,通过SSH连接执行...