当前位置: 移动技术网 > IT编程>开发语言>Java > 通过Java实现bash命令过程解析

通过Java实现bash命令过程解析

2020年03月09日  | 移动技术网IT编程  | 我要评论

课堂教学实录,yn12530,邹平程作通

这篇文章主要介绍了通过java实现bash命令过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1、bash 命令简介

2、java实现 bash命令执行shell脚本

1)代码实现如下:

import ch.ethz.ssh2.connection;
import ch.ethz.ssh2.session;
import ch.ethz.ssh2.streamgobbler;
import org.slf4j.logger;
import org.slf4j.loggerfactory;

import java.io.bufferedreader;
import java.io.inputstream;
import java.io.inputstreamreader;
import java.util.arraylist;
import java.util.list;


public class bashutil {

  private logger logger = loggerfactory.getlogger(bashutil.class);

  private string hostname;

  private string username;

  private string password;

  private int port;

  private connection conn;

  private bashutil() {
  }

  public bashutil(string hostname, string username, string password) {
    this(hostname, username, password, 22);
  }

  public bashutil(string hostname, string username, string password, integer port) {
    this.hostname = hostname;
    this.username = username;
    this.password = password;
    if (port == null) {
      port = 22;
    } else {
      this.port = port;
    }
  }

  /**
   * 创建连接并认证
   * @return
   */
  public boolean connection() {
    try {
      conn = new connection(hostname, port);
      conn.connect();
      boolean isauthenticated = conn.authenticatewithpassword(username, password);
      return isauthenticated;
    } catch (exception e) {
      e.printstacktrace();
      return false;
    }
  }

  /**
   * 关闭连接
   */
  public void close() {
    try {
      conn.close();
      conn = null;
    } catch (exception e) {
      e.printstacktrace();
    }
  }

  /**
   * 执行shell命令
   * @param command
   * @return
   */
  public list<string> command(string command) {
    if (conn == null && !connection()) {
      logger.error("authentication failed.");
      return null;
    }
    list<string> result = new arraylist<string>();
    try {
      session sess = conn.opensession();
      sess.execcommand(command);
      inputstream stdout = new streamgobbler(sess.getstdout());
      inputstream stderr = new streamgobbler(sess.getstderr());
      bufferedreader br_out = new bufferedreader(new inputstreamreader(stdout, "utf-8"));
      bufferedreader br_err = new bufferedreader(new inputstreamreader(stderr, "utf-8"));
      stringbuffer sb_err = new stringbuffer();
      string line = null;
      while ((line = br_out.readline()) != null) {
        result.add(line.trim());
      }
      while ((line = br_err.readline()) != null) {
        sb_err.append(line + "\n");
      }
      if (isnotempty(sb_err.tostring())) {
        logger.error(sb_err.tostring());
        return null;
      }
      return result;
    } catch (exception e) {
      e.printstacktrace();
    }
    return null;
  }


  private static boolean isempty(string content) {
    if (content == null) {
      return true;
    } else {
      return "".equals(content.trim()) || "null".equalsignorecase(content.trim());
    }
  }

  private static boolean isnotempty(string content) {
    return !isempty(content);
  }

  public static void main(string[] args){
    string hostname = "192.168.123.234";  // 此处根据实际情况,换成自己需要访问的主机ip
    string username = "root";
    string password = "password";
    integer port = 22;
    string command = "cd /home/miracle&&pwd&&ls&&cat luna.txt";

    bashutil bashutil = new bashutil(hostname, username, password, port);
    list<string> resultlist = bashutil.command(command);
    stringbuffer result = new stringbuffer("");
    resultlist.foreach(str -> result.append(str + "\n"));

    system.out.println("执行的结果如下: \n" + result.tostring());
  }
}

2)执行结果如下:

执行的结果如下: 
/home/miracle
luna.txt
hello, i'm sshutil.
nice to meet you.^_^

3)pom.xml引用依赖包如下:

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
      <groupid>org.slf4j</groupid>
      <artifactid>slf4j-api</artifactid>
      <version>1.7.21</version>
    </dependency>


    <!-- ssh -->
    <dependency>
      <groupid>ch.ethz.ganymed</groupid>
      <artifactid>ganymed-ssh2</artifactid>
      <version>262</version>
    </dependency>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网