经过过程Java完成bash敕令过程解析

发布时间:2020-01-14 20:15 来源:互联网 以后栏目:网站办事器

这篇文章重要简介了经过过程Java完成bash敕令过程解析,文中经过过程示例代码简介的异常详细,对大年夜家的进修或许任务具有必定的参考进修价值,须要的同伙可以参考下

1、BASH 敕令简介

Bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU筹划而编写。1989年发布第一个正式版本,本来是筹划用在GNU操作体系上,但能运转于大年夜多半类Unix体系的操作体系之上,包含Linux与Mac OS X v10.4都将它作为默许shell。 Bash是Bourne shell的后继兼容版本与开放源代码版本,它的称号来自Bourne shell(sh)的一个双关语(Bourne again / born again):Bourne-Again SHell。 Bash是一个敕令处理器,平日运转于文本窗口中,并能履行用户直接输入的敕令。Bash还能从文件中读取敕令,如许的文件称为脚本。和其他Unix shell 一样,它支撑文件名调换(通配符婚配)、管道、here文档、敕令调换、变量,和条件断定和轮回遍历的构造控制语句。包含关键字、语法在内的根本特点全部是从sh自创过去的。其他特点,例如汗青敕令,是从csh和ksh自创而来。总的来讲,Bash固然是一个满足POSIX标准的shell,但有很多扩大。

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());
  }
}
        
 
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、