/**
* 运行shell脚本
* @param shell 需要运行的shell脚本
*/
public static void execShell(String shell){
try {
Runtime rt = Runtime.getRuntime();
rt.exec(shell);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 运行shell
*
* @param shStr
* 需要执行的shell
* @return
* @throws IOException
*/
public static List runShell(String shStr) throws Exception {
List<String> strList = new ArrayList(); Process process;
process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",shStr},null,null);
InputStreamReader ir = new InputStreamReader(process
.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String line;
process.waitFor();
while ((line = input.readLine()) != null){
strList.add(line);
} return strList;
}
  

远程登陆linux且调用shell

首先在远程服务器上编写一个测试脚本test.sh,并赋予可执行权限:chmod +x test.sh

  1. #!/bin/bash
  2. echo 'test22'
  3. echo $1

$1是脚本传进来的第一个参数,我们控制台打印一下这个参数

新建maven项目,添加依赖:

  1. <dependency>
  2. <groupId>org.jvnet.hudson</groupId>
  3. <artifactId>ganymed-ssh2</artifactId>
  4. <version>build210-hudson-1</version>
  5. </dependency>

编写一个工具类:

  1. package com.xj.runshell;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.nio.charset.Charset;
  5. import ch.ethz.ssh2.Connection;
  6. import ch.ethz.ssh2.Session;
  7. public class RemoteShellTool {
  8. private Connection conn;
  9. private String ipAddr;
  10. private String charset = Charset.defaultCharset().toString();
  11. private String userName;
  12. private String password;
  13. public RemoteShellTool(String ipAddr, String userName, String password,
  14. String charset) {
  15. this.ipAddr = ipAddr;
  16. this.userName = userName;
  17. this.password = password;
  18. if (charset != null) {
  19. this.charset = charset;
  20. }
  21. }
  22. public boolean login() throws IOException {
  23. conn = new Connection(ipAddr);
  24. conn.connect(); // 连接
  25. return conn.authenticateWithPassword(userName, password); // 认证
  26. }
  27. public String exec(String cmds) {
  28. InputStream in = null;
  29. String result = "";
  30. try {
  31. if (this.login()) {
  32. Session session = conn.openSession(); // 打开一个会话
  33. session.execCommand(cmds);
  34. in = session.getStdout();
  35. result = this.processStdout(in, this.charset);
  36. session.close();
  37. conn.close();
  38. }
  39. } catch (IOException e1) {
  40. e1.printStackTrace();
  41. }
  42. return result;
  43. }
  44. public String processStdout(InputStream in, String charset) {
  45. byte[] buf = new byte[1024];
  46. StringBuffer sb = new StringBuffer();
  47. try {
  48. while (in.read(buf) != -1) {
  49. sb.append(new String(buf, charset));
  50. }
  51. } catch (IOException e) {
  52. e.printStackTrace();
  53. }
  54. return sb.toString();
  55. }
  56. /**
  57. * @param args
  58. */
  59. public static void main(String[] args) {
  60. RemoteShellTool tool = new RemoteShellTool("192.168.27.41", "hadoop",
  61. "hadoop", "utf-8");
  62. String result = tool.exec("./test.sh xiaojun");
  63. System.out.print(result);
  64. }
  65. }

main函数中执行了./test.sh xiaojun这个命令,控制台打印出:

test22

xiaojun

java调用shell脚本,并获得结果集的例子的更多相关文章

  1. Java 调用 shell 脚本详解

    这一年的项目中,有大量的场景需要Java 进程调用 Linux的bash shell 脚本实现相关功能. 从之前的项目中拷贝的相关模块和网上的例子来看,有个别的“陷阱”造成调用shell 脚本在某些特 ...

  2. java调用shell脚本小demo

    复制指定文件cpp.sh: [root@localhost soft]# vim cpp.sh#!/bin/bash name="$1"\cp /home/soft/test/${ ...

  3. [转载]JAVA调用Shell脚本

    FROM:http://blog.csdn.net/jj12345jj198999/article/details/11891701 在实际项目中,JAVA有时候需要调用C写出来的东西,除了JNI以外 ...

  4. java调用shell脚本

    /** * 运行shell脚本 * @param shell 需要运行的shell脚本 */ public static void execShell(String shell){ try { Run ...

  5. JAVA调用shell脚本利用ansible修改多节点上的redis参数

    创建hosts文件 创建ansible-playbook执行时所用到的hosts文件,例如 /etc/redis/hosts 利用shell命令根据传入的host名和地址写入hosts文件: #set ...

  6. java调用shell脚本执行操作

    //定时清空 日志 String shellString = "sh /home/jyapp/delete_log.sh"; Process process = Runtime.g ...

  7. Java 执行Shell脚本指令

    一.介绍 有时候我们在Linux中运行Java程序时,需要调用一些Shell命令和脚本.而Runtime.getRuntime().exec()方法给我们提供了这个功能,而且Runtime.getRu ...

  8. 用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql

    1:创建shell脚本 touch sqoop_options.sh chmod 777 sqoop_options.sh 编辑文件  特地将执行map的个数设置为变量  测试 可以java代码传参数 ...

  9. java基础/java调用shell命令和脚本

    一.项目需求: 从某一机构获取证书,证书机构提供小工具,执行.sh脚本即可启动服务,本地调用该服务即可获取证书. 问题:linux服务器启动该服务,不能关闭.一旦关闭,服务即停止. 解决方案:java ...

随机推荐

  1. python urllib2与urllib

    1.urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urllib只接收一个URL. 2.urllib模块可以提供进行urlencode的方法,该方法用于G ...

  2. Java数据结构和算法(十四)——堆

    在Java数据结构和算法(五)——队列中我们介绍了优先级队列,优先级队列是一种抽象数据类型(ADT),它提供了删除最大(或最小)关键字值的数据项的方法,插入数据项的方法,优先级队列可以用有序数组来实现 ...

  3. java IO(一):File类

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  4. zabbix监控windows agent安装配置

    下载Windows的zabbix客户端 下载地址:http://www.zabbix.com/download.php 从官方下载Zabbix Agent后,压缩包里面有2个目录,bin和conf,c ...

  5. GitHub For Beginners: Don’t Get Scared, Get Started

    It's 2013, and there's no way around it: you need to learn how to use GitHub.2 Why? Because it's a s ...

  6. iozone测试磁盘性能

    什么是iozone? iozone是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统的读写性能. 可以测试 Read, write, re-read,re-write, read ...

  7. Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】

    什么是Session Session 是另一种记录浏览器状态的机制.不同的是Cookie保存在浏览器中,Session保存在服务器中.用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录 ...

  8. 浅谈python中的闭包函数

    闭包函数初探 通常我们定义函数都是这样定义的 def foo(): pass 其实在函数式编程中,函数里面还可以嵌套函数,如下面这样 def foo(): print("hello worl ...

  9. python3,进程间的通信

    本文来源于python 3.5版本的官方文档 multiprocessing模块为进程间通信提供了两种方法: 1.进程队列queue The Queue class is a near clone o ...

  10. CheckStyle

    在Eclipse当中安装CheckStyle插件非常方便,和安装FindBugs除了URL有区别之外,其他的几乎完全一样.我们可以参照以下几个步骤进行(注意一下,eclipse版本不一样,可能安装插件 ...