当前位置:首页软件开发Java → JAVA 调用linux shell命令

JAVA 调用linux shell命令

时间:2020-08-12 18:12:30来源:互联网我要评论(0)
package com.test.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.cnunisoft.util.TextLogger;

public class JavaShellUtil {
	
	/**
	 * 调用方法为: JavaShellUtil javaShellUtil = new JavaShellUtil();
	//参数为要执行的Shell命令,即通过调用Shell脚本sendKondorFile.sh将/temp目录下的tmp.pdf文件发送到192.168.1.200上
	int success = JavaShellUtil.executeShell("sh /tmp/sendKondorFile.sh /temp tmp.pdf",false);
	 * @param shellCommand
	 * @return
	 * @throws IOException
	 */
	public static int executeShell(String shellCommand,boolean waitFor) throws IOException {
		int success = 1;//默认是成功的 
		StringBuffer stringBuffer = new StringBuffer();
		BufferedReader bufferedReader = null;
		// 格式化日期时间,记录日志时使用
		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS ");

		try {
			stringBuffer.append(dateFormat.format(new Date()))
					.append("exec Shell:").append(shellCommand)
					.append(" \r\n");

			Process pid = null;
			//String[] cmd = { "/bin/sh", "-c", shellCommand };
			// 执行Shell命令
			pid = Runtime.getRuntime().exec(shellCommand);
			if (pid != null) {
				stringBuffer.append("pid:").append(pid.toString())
						.append("\r\n");
				if(waitFor){
					pid.waitFor();
				}
				bufferedReader = new BufferedReader(new InputStreamReader(
						pid.getInputStream()), 1024);
			} else {
				stringBuffer.append("no pid\r\n");
			}
			stringBuffer.append(dateFormat.format(new Date())).append(
					"Shell result:\r\n");
			String line = null;
			// 读取Shell的输出内容,并添加到stringBuffer中
			while (bufferedReader != null
					&& (line = bufferedReader.readLine()) != null) {
				stringBuffer.append(line).append("\r\n");
			}
		} catch (Exception ioe) {
			stringBuffer.append("Shell Exception:\r\n").append(ioe.getMessage())
					.append("\r\n");
			success = 0;
		} finally {
			if(bufferedReader!=null){
				bufferedReader.close();
			}
			TextLogger.getLogger().warning(stringBuffer.toString());
		}
		return success;
	}
	
	/**
	 * 带返回值的shell调用
	 * 注意linux并不是所有的都有返回值的,要特殊处理ls是有的 ,但是ps -ef|grep就么有 
	 * @param shellCommand
	 * @return
	 * @throws IOException
	 */
	public static String executeShellWidthReturn(String shellCommand){
		//返回值
		StringBuffer stringBufferReturn = new StringBuffer();
		//记录日志
		StringBuffer stringBufferLog = new StringBuffer();
		// 格式化日期时间,记录日志时使用
		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS ");
		InputStreamReader ir = null;
		try {
			stringBufferLog.append(dateFormat.format(new Date()))
					.append("Will Exec Shell:").append(shellCommand)
					.append(" \r\n");

			Process process = null;
			//String[] cmd = { "/bin/sh", "-c", shellCommand };
			// 执行Shell命令
			process = Runtime.getRuntime().exec(shellCommand);
			// ir用于读取Shell的输出内容
			ir=new InputStreamReader(process.getInputStream()); 
			LineNumberReader input = new LineNumberReader (ir);
			if (process == null){
				stringBufferLog.append("Exec Error\r\n");
			}
			stringBufferLog.append(dateFormat.format(new Date())).append(
					"Exec Completed \r\nResult:\r\n");
			String line = null;
			// 读取Shell的输出内容,并添加到stringBuffer中
			 while ((line = input.readLine ()) != null) {
				stringBufferLog.append(line).append("\r\n");
				stringBufferReturn.append(line);
			}
		} catch (Exception ioe) {
			stringBufferLog.append("Exec Exception:\r\n").append(ioe.getMessage())
					.append("\r\n");
		} finally {
			if(ir!=null){
				try {
					ir.close();
				} catch (IOException e) {
				}
			}
			TextLogger.getLogger().warning(stringBufferLog.toString());
		}
		return stringBufferReturn.toString();
	}
	
	/**
	 * 调用方法为: JavaShellUtil javaShellUtil = new JavaShellUtil();
	//参数为要执行的Shell命令,即通过调用Shell脚本sendKondorFile.sh将/temp目录下的tmp.pdf文件发送到192.168.1.200上
	int success = JavaShellUtil.executeShell("sh /tmp/sendKondorFile.sh /temp tmp.pdf",false);
	 * @param shellCommand
	 * @return
	 * @throws IOException
	 */
	public static int executeCommand(String shellCommand,boolean waitFor) throws IOException {
		int success = 1;//默认是成功的 
		StringBuffer stringBuffer = new StringBuffer();
		BufferedReader bufferedReader = null;
		// 格式化日期时间,记录日志时使用
		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS ");

		try {
			stringBuffer.append(dateFormat.format(new Date()))
					.append("exec Shell:").append(shellCommand)
					.append(" \r\n");

			Process pid = null;
			String[] cmd = { "/bin/sh", "-c", shellCommand };
			// 执行Shell命令
			pid = Runtime.getRuntime().exec(cmd);
			if (pid != null) {
				stringBuffer.append("pid:").append(pid.toString())
						.append("\r\n");
				if(waitFor){
					pid.waitFor();
				}
				bufferedReader = new BufferedReader(new InputStreamReader(
						pid.getInputStream()), 1024);
			} else {
				stringBuffer.append("no pid\r\n");
			}
			stringBuffer.append(dateFormat.format(new Date())).append(
					"Shell result:\r\n");
			String line = null;
			// 读取Shell的输出内容,并添加到stringBuffer中
			while (bufferedReader != null
					&& (line = bufferedReader.readLine()) != null) {
				stringBuffer.append(line).append("\r\n");
			}
		} catch (Exception ioe) {
			stringBuffer.append("Shell Exception:\r\n").append(ioe.getMessage())
					.append("\r\n");
			success = 0;
		} finally {
			if(bufferedReader!=null){
				bufferedReader.close();
			}
			TextLogger.getLogger().warning(stringBuffer.toString());
		}
		return success;
	}
}

相关文章

网友评论

热门评论

最新评论

发表评论 查看所有评论()

昵称:
表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
字数: 0/500 (您的评论需要经过审核才能显示)

关于万荚 | 联系方式 | 发展历程 | 版权声明 | 帮助(?) | 网站地图 | 友情链接

Copyright 2005-2020 16WJ.COM 〖万荚网〗 版权所有 桂ICP备18000060号 |

声明: 本站所有文章来自互联网 如有异议 请与本站联系