java调用shell脚本,并获得结果集的例子
/**
* 运行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
- #!/bin/bash
- echo 'test22'
- echo $1
$1是脚本传进来的第一个参数,我们控制台打印一下这个参数
新建maven项目,添加依赖:
- <dependency>
- <groupId>org.jvnet.hudson</groupId>
- <artifactId>ganymed-ssh2</artifactId>
- <version>build210-hudson-1</version>
- </dependency>
编写一个工具类:
- package com.xj.runshell;
- import java.io.IOException;
- import java.io.InputStream;
- import java.nio.charset.Charset;
- import ch.ethz.ssh2.Connection;
- import ch.ethz.ssh2.Session;
- public class RemoteShellTool {
- private Connection conn;
- private String ipAddr;
- private String charset = Charset.defaultCharset().toString();
- private String userName;
- private String password;
- public RemoteShellTool(String ipAddr, String userName, String password,
- String charset) {
- this.ipAddr = ipAddr;
- this.userName = userName;
- this.password = password;
- if (charset != null) {
- this.charset = charset;
- }
- }
- public boolean login() throws IOException {
- conn = new Connection(ipAddr);
- conn.connect(); // 连接
- return conn.authenticateWithPassword(userName, password); // 认证
- }
- public String exec(String cmds) {
- InputStream in = null;
- String result = "";
- try {
- if (this.login()) {
- Session session = conn.openSession(); // 打开一个会话
- session.execCommand(cmds);
- in = session.getStdout();
- result = this.processStdout(in, this.charset);
- session.close();
- conn.close();
- }
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- return result;
- }
- public String processStdout(InputStream in, String charset) {
- byte[] buf = new byte[1024];
- StringBuffer sb = new StringBuffer();
- try {
- while (in.read(buf) != -1) {
- sb.append(new String(buf, charset));
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- return sb.toString();
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- RemoteShellTool tool = new RemoteShellTool("192.168.27.41", "hadoop",
- "hadoop", "utf-8");
- String result = tool.exec("./test.sh xiaojun");
- System.out.print(result);
- }
- }
main函数中执行了./test.sh xiaojun这个命令,控制台打印出:
test22
xiaojun
java调用shell脚本,并获得结果集的例子的更多相关文章
- Java 调用 shell 脚本详解
这一年的项目中,有大量的场景需要Java 进程调用 Linux的bash shell 脚本实现相关功能. 从之前的项目中拷贝的相关模块和网上的例子来看,有个别的“陷阱”造成调用shell 脚本在某些特 ...
- java调用shell脚本小demo
复制指定文件cpp.sh: [root@localhost soft]# vim cpp.sh#!/bin/bash name="$1"\cp /home/soft/test/${ ...
- [转载]JAVA调用Shell脚本
FROM:http://blog.csdn.net/jj12345jj198999/article/details/11891701 在实际项目中,JAVA有时候需要调用C写出来的东西,除了JNI以外 ...
- java调用shell脚本
/** * 运行shell脚本 * @param shell 需要运行的shell脚本 */ public static void execShell(String shell){ try { Run ...
- JAVA调用shell脚本利用ansible修改多节点上的redis参数
创建hosts文件 创建ansible-playbook执行时所用到的hosts文件,例如 /etc/redis/hosts 利用shell命令根据传入的host名和地址写入hosts文件: #set ...
- java调用shell脚本执行操作
//定时清空 日志 String shellString = "sh /home/jyapp/delete_log.sh"; Process process = Runtime.g ...
- Java 执行Shell脚本指令
一.介绍 有时候我们在Linux中运行Java程序时,需要调用一些Shell命令和脚本.而Runtime.getRuntime().exec()方法给我们提供了这个功能,而且Runtime.getRu ...
- 用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql
1:创建shell脚本 touch sqoop_options.sh chmod 777 sqoop_options.sh 编辑文件 特地将执行map的个数设置为变量 测试 可以java代码传参数 ...
- java基础/java调用shell命令和脚本
一.项目需求: 从某一机构获取证书,证书机构提供小工具,执行.sh脚本即可启动服务,本地调用该服务即可获取证书. 问题:linux服务器启动该服务,不能关闭.一旦关闭,服务即停止. 解决方案:java ...
随机推荐
- python urllib2与urllib
1.urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urllib只接收一个URL. 2.urllib模块可以提供进行urlencode的方法,该方法用于G ...
- Java数据结构和算法(十四)——堆
在Java数据结构和算法(五)——队列中我们介绍了优先级队列,优先级队列是一种抽象数据类型(ADT),它提供了删除最大(或最小)关键字值的数据项的方法,插入数据项的方法,优先级队列可以用有序数组来实现 ...
- java IO(一):File类
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- zabbix监控windows agent安装配置
下载Windows的zabbix客户端 下载地址:http://www.zabbix.com/download.php 从官方下载Zabbix Agent后,压缩包里面有2个目录,bin和conf,c ...
- 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 ...
- iozone测试磁盘性能
什么是iozone? iozone是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统的读写性能. 可以测试 Read, write, re-read,re-write, read ...
- Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】
什么是Session Session 是另一种记录浏览器状态的机制.不同的是Cookie保存在浏览器中,Session保存在服务器中.用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录 ...
- 浅谈python中的闭包函数
闭包函数初探 通常我们定义函数都是这样定义的 def foo(): pass 其实在函数式编程中,函数里面还可以嵌套函数,如下面这样 def foo(): print("hello worl ...
- python3,进程间的通信
本文来源于python 3.5版本的官方文档 multiprocessing模块为进程间通信提供了两种方法: 1.进程队列queue The Queue class is a near clone o ...
- CheckStyle
在Eclipse当中安装CheckStyle插件非常方便,和安装FindBugs除了URL有区别之外,其他的几乎完全一样.我们可以参照以下几个步骤进行(注意一下,eclipse版本不一样,可能安装插件 ...