/**
* 运行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. EL表达式和JSTL核心标签库

    1 EL表达式 1.1 EL的概述 EL,全名为Expression Language. 主要作用: ①EL表达式主要用于替换jsp页面中的脚本表达式,以便于从各种类型的web域中检索java对象(某 ...

  2. 05_Javascript进阶第二天

    String对象 res=str.charAt(1);//返回字符串中第n个字符(输出:i) res=str.charCodeAt(1);//返回第n个字符的ASCII编码(输出:105) res=S ...

  3. 关于awk的范围模式功能问题

    关于awk的范围模式功能问题 man awk中这样写到 The pattern1, pattern2 form of an expression is called a range pattern. ...

  4. 【转】nagios 命令解释

    nagios 命令解释 check_ssh                 界面拼装参数格式如下共3个元素:                         命令!端口!连接超时时间          ...

  5. JS中的算法与数据结构——排序(Sort)(转)

    排序算法(Sort) 引言 我们平时对计算机中存储的数据执行的两种最常见的操作就是排序和查找,对于计算机的排序和查找的研究,自计算机诞生以来就没有停止过.如今又是大数据,云计算的时代,对数据的排序和查 ...

  6. appium GUI介绍

    Appium作为APP端的自动化测试工具,具有很多的有点,今天主要介绍一下它的UI界面,包含其中的一些参数等.主要说的是windows下的APPIUM GUI. 先看一眼它的界面(版本为1.4.16. ...

  7. ELK日志管理搭建

    目录: 一.介绍 二.安装JDK 三.安装Elasticsearch 四.安装Kibana 五.安装Nginx 六.安装Logstash 七.安装Logstash-forwarder 八.测试 系统环 ...

  8. c# 颜色RGB到HSB互相转换

    /// <summary> /// 色相,饱和度,亮度转换成rgb值 /// </summary> /// <returns></returns> pu ...

  9. SSD写入放大问题[转]

    原文地址:http://blog.csdn.net/cywosp/article/details/29812433 之前在SSD(Solid State Drive)上设计并实现缓存系统用于存储数据块 ...

  10. BZOJ 2938: [Poi2000]病毒 [AC自动机 拓扑排序]

    2938: [Poi2000]病毒 题意:判断是否存在无限长的不含模式串的字符串.只有01. 建出套路DP的转移图,判断有环就行了 练习一下拓扑排序 #include <iostream> ...