如何在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分别拿到的参数。

参考技术A .

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运行完,下面对数据的处理才有用)

如何在shell脚本里调用另一个shell脚本

如何shell脚本中,执行一个其他程序的命令,然后保存这个执行这个命令的结果和过程?

如何在shell脚本中调用另一个shell的结果

如何在Linux中执行Shell脚本?

shell 在脚本中执行了source /etc/profile 不生效