如何在java中执行shell脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在java中执行shell脚本相关的知识,希望对你有一定的参考价值。
1、最常用的方法:
Process p = Runtime.getRuntime().exec(SHELL_FILE_DIR + RUNNING_SHELL_FILE +" "+param1+" "+param2+" "+param3);
int runnngStatus = p.waitFor();
2、通过ProcessBuilder进行调度,这种方法比较直观,而且参数的设置也比较方便:
ProcessBuilder pb = new ProcessBuilder("./" + RUNNING_SHELL_FILE, param1,param2, param3);
pb.directory(new File(SHELL_FILE_DIR));
int runningStatus = 0;
String s = null;
try
Process p = pb.start();
try
runningStatus = p.waitFor();
catch (InterruptedException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
if (runningStatus != 0)
return;
参数说明:
RUNNING_SHELL_FILE:要运行的脚本
SHELL_FILE_DIR:要运行的脚本所在的目录; 当然你也可以把要运行的脚本写成全路径。
runningStatus:运行状态,0标识正常。 详细可以看java文档。
param1, param2, param3:可以在RUNNING_SHELL_FILE脚本中直接通过1,1,2,$3分别拿到的参数。
java连接ssh执行shell脚本
在liunx上写了一个shell脚本,想通过java去调用这个shell脚本,不知道怎么去调用,在网上说使用process这个进程方式,但是我执行机和我shell脚本都不在同一台电脑,老大说java中可以连接ssh,执行shell脚本,以下代码来自他们以前的项目
public class SSH { static Connection conn = null; static String hostname = "XXXiP地址2"; static String username = "root"; static String password = "zhou123"; static int port = 36000; public static void connect() throws IOException { try { conn = new Connection(hostname,port); conn.connect(); conn.authenticateWithPassword(username, password); } catch (Exception e) { System.out.println("ִ���쳣"); System.out.println("" + e); } } @SuppressWarnings("resource") public static String execCommand(String command) throws IOException { connect(); Session session = conn.openSession(); session.execCommand(command); StreamGobbler stdout = new StreamGobbler(session.getStdout()); BufferedReader br = new BufferedReader(new InputStreamReader((stdout), "UTF-8")); String line = ""; while ((line = br.readLine()) != null) { System.out.println(line); } session.close(); return line; } @SuppressWarnings("resource") public static ArrayList<String> execCommandd(String command) throws IOException { connect(); Session session = conn.openSession(); session.execCommand(command); ArrayList<String> array_result = new ArrayList<String>(); StreamGobbler stdout = new StreamGobbler(session.getStdout()); BufferedReader br = new BufferedReader(new InputStreamReader((stdout), "UTF-8")); String line; while ((line = br.readLine()) != null) { array_result.add(line); } session.close(); return array_result; } public static void main(String[] args) { try { // System.out.println( execCommandd("uname -s -r -v")); System.out.println( execCommandd("pwd"));//使用的sh方式执行 System.out.println( execCommandd("sh /script/test3.sh"));//使用的sh方式执行 } catch (IOException e) { e.printStackTrace(); } }
需要注意,在执行shell脚本时,正常这样就可以实现了
但是你会发现你在代码中这样写,会告诉你连接失败,正常写法是 sh /目录下你的shell脚本,这个也是让我纠结了很久,因为像正常的pwd命令他是可以正常执行,但是一旦是其他就不能执行,就必须要使用sh
以上是关于如何在java中执行shell脚本的主要内容,如果未能解决你的问题,请参考以下文章
shell脚本中调用JAVA 程序,如何让JAVA运行结束后,再执行下面命令(只有java运行完,下面对数据的处理才有用)