/**
	 * 运行shell脚本
	 * @param shell 需要运行的shell脚本
	 */
	public static void execShell(String shell){
		try {
			Runtime rt = Runtime.getRuntime();
			rt.exec(shell);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
/**
	 * 运行shell
	 * 
	 * @param shStr
	 *            需要执行的shell
	 * @return
	 * @throws IOException
	 */
	public static List runShell(String shStr) throws Exception {
		List<String> strList = new ArrayList();
		Process process;
		process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",shStr},null,null);
		InputStreamReader ir = new InputStreamReader(process
				.getInputStream());
		LineNumberReader input = new LineNumberReader(ir);
		String line;
		process.waitFor();
		while ((line = input.readLine()) != null){
		    strList.add(line);
		}
		
		return strList;
	}
  
 
 
远程登陆linux且调用shell
首先在远程服务器上编写一个测试脚本test.sh,并赋予可执行权限:chmod +x test.sh
- #!/bin/bash  
 
- echo ‘test22‘  
 
- echo $1  
 
 
$1是脚本传进来的第一个参数,我们控制台打印一下这个参数
 
新建maven项目,添加依赖:
- <dependency>  
 
-     <groupId>org.jvnet.hudson</groupId>  
 
-     <artifactId>ganymed-ssh2</artifactId>  
 
-     <version>build210-hudson-1</version>  
 
- </dependency>  
 
 
 
编写一个工具类:
- package com.xj.runshell;  
 
-   
 
- import java.io.IOException;  
 
- import java.io.InputStream;  
 
- import java.nio.charset.Charset;  
 
-   
 
- import ch.ethz.ssh2.Connection;  
 
- import ch.ethz.ssh2.Session;  
 
-   
 
- public class RemoteShellTool {  
 
-   
 
-     private Connection conn;  
 
-     private String ipAddr;  
 
-     private String charset = Charset.defaultCharset().toString();  
 
-     private String userName;  
 
-     private String password;  
 
-   
 
-     public RemoteShellTool(String ipAddr, String userName, String password,  
 
-             String charset) {  
 
-         this.ipAddr = ipAddr;  
 
-         this.userName = userName;  
 
-         this.password = password;  
 
-         if (charset != null) {  
 
-             this.charset = charset;  
 
-         }  
 
-     }  
 
-   
 
-     public boolean login() throws IOException {  
 
-         conn = new Connection(ipAddr);  
 
-         conn.connect(); 
 
-         return conn.authenticateWithPassword(userName, password); 
 
-     }  
 
-   
 
-     public String exec(String cmds) {  
 
-         InputStream in = null;  
 
-         String result = "";  
 
-         try {  
 
-             if (this.login()) {  
 
-                 Session session = conn.openSession(); 
 
-                 session.execCommand(cmds);  
 
-                   
 
-                 in = session.getStdout();  
 
-                 result = this.processStdout(in, this.charset);  
 
-                 session.close();  
 
-                 conn.close();  
 
-             }  
 
-         } catch (IOException e1) {  
 
-             e1.printStackTrace();  
 
-         }  
 
-         return result;  
 
-     }  
 
-   
 
-     public String processStdout(InputStream in, String charset) {  
 
-       
 
-         byte[] buf = new byte[1024];  
 
-         StringBuffer sb = new StringBuffer();  
 
-         try {  
 
-             while (in.read(buf) != -1) {  
 
-                 sb.append(new String(buf, charset));  
 
-             }  
 
-         } catch (IOException e) {  
 
-             e.printStackTrace();  
 
-         }  
 
-         return sb.toString();  
 
-     }  
 
-   
 
-     
 
-     public static void main(String[] args) {  
 
-   
 
-         RemoteShellTool tool = new RemoteShellTool("192.168.27.41", "hadoop",  
 
-                 "hadoop", "utf-8");  
 
-   
 
-         String result = tool.exec("./test.sh xiaojun");  
 
-         System.out.print(result);  
 
-   
 
-     }  
 
-   
 
- }  
 
 
main函数中执行了./test.sh xiaojun这个命令,控制台打印出:
test22
xiaojun