通过Java实现bash命令过程解析
程序员文章站
2022-05-30 13:10:32
这篇文章主要介绍了通过java实现bash命令过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
1、bash 命令简介...
这篇文章主要介绍了通过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>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。