1. /**
  2. * 运行shell脚本
  3. * @param shell 需要运行的shell脚本
  4. */
  5. public static void execShell(String shell){
  6. try {
  7. Runtime rt = Runtime.getRuntime();
  8. rt.exec(shell);
  9. } catch (Exception e) {
  10. e.printStackTrace();
  11. }
  12. }
  13.  
  14. /**
  15. * 运行shell
  16. *
  17. * @param shStr
  18. * 需要执行的shell
  19. * @return
  20. * @throws IOException
  21. */
  22. public static List runShell(String shStr) throws Exception {
  23. List<String> strList = new ArrayList();
  24.  
  25. Process process;
  26. process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",shStr},null,null);
  27. InputStreamReader ir = new InputStreamReader(process
  28. .getInputStream());
  29. LineNumberReader input = new LineNumberReader(ir);
  30. String line;
  31. process.waitFor();
  32. while ((line = input.readLine()) != null){
  33. strList.add(line);
  34. }
  35.  
  36. return strList;
  37. }
  38.   

远程登陆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. TP手册学习第一天

    调试执行的sql语句 User::get(1); echo User::getLastSql(); 方法直接返回当前的查询SQL而不执行fetchSql echo User::fetchSql()-& ...

  2. HTML5图形绘制

    要在HTML5中绘制图形,首先要放置一个canvas元素 <canvas id="canvas" width="400" height="300 ...

  3. Spring Cache For Redis

    一.概述 缓存(Caching)可以存储经常会用到的信息,这样每次需要的时候,这些信息都是立即可用的. 常用的缓存数据库: Redis   使用内存存储(in-memory)的非关系数据库,字符串.列 ...

  4. 前端之基础css

    一.anchor伪类,用于阅读文章. a:link(没有接触过的链接),用于链接常规状态 (末访问的链接)a:hover(鼠标放在链接上的状态) 用于产生视觉效果(已访问的链接)a:visited(访 ...

  5. Django跨域请求之JSONP和CORS

    现在来新建一个Django项目server01,url配置为 url(r'^getData.html$',views.get_data) 其对应的视图函数为get_data: from django. ...

  6. c# excel print 打印 将所有列调整为一页

    excel有时候列数比较多,行数也比较多,转换成xps文档的时候,一般是通过打印来实现. 由于打印的范围限制,所以会出现本来在一行的数据,由于列数比较多,溢出范围,被打印到两页了. 为解决这个问题,需 ...

  7. Ubuntu14.04 命令行下安装teamviewer

    下载teamviewer 链接:https://pan.baidu.com/s/1hs0BppM  密码:sdmk 上传到 /home/[user] cd /home/[user] 移动安装包到 /o ...

  8. iOS-Xcode编码自动补全失效

    1. 退出 Xcode 2. 重启电脑 3. 找到 这个 DerivedData 文件夹 删除 (路径: ~/Library/Developer/Xcode/DerivedData) 4. 删除这个 ...

  9. BZOJ 1485: [HNOI2009]有趣的数列 [Catalan数 质因子分解]

    1485: [HNOI2009]有趣的数列 Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所 ...

  10. DirectSound---简易Wav播放器

    这篇文章主要给大家介绍下如何用DirectSound打造一个简易播放器,因为篇幅有限且代码逻辑较为复杂,我们只介绍下核心技术内容.该播放器主要包括以下功能: 播放.暂停 播放进度提示. 1. Dire ...