当前位置:首页 » 操作系统 » linuxshjava

linuxshjava

发布时间: 2024-11-19 16:29:49

A. 通过java程序(JSch)运行远程linux主机上的shell脚本

通过Java程序运行远程Linux主机上的shell脚本是可能的,这需要借助JSch库来实现。

在使用之前,请确保远程主机已经开启SSH服务。接下来,通过Maven坐标引入JSch依赖库,以执行远程主机上的脚本。

创建名为“hello.sh”的文件,内容仅用于测试,即输出“hello ”。将此文件保存在远程主机的“/root”目录下,并为脚本设置可执行权限。

使用以下Java代码在本地执行远程主机上的shell脚本,代码中包含了详细的注释以说明其功能。执行后,可以在本地控制台获取远程主机上shell脚本的执行结果。

实例代码演示了如何实现远程Linux主机上的shell脚本执行。此外,代码可以通过进一步封装来提供更简便的使用方式。

总结,通过Java程序和JSch库可以轻松运行远程Linux主机上的shell脚本,并获取执行结果。

B. 在linux上单独用shell脚本可以完成文件上传,可是使用java来调用这个shell脚本却提示无法连接

不要用sh来运行,用bash。sh 应该不支持here doc。

Process process = Runtime.getRuntime().exec(new String[] {
"sh", "/ftpfile"});

==>

Process process = Runtime.getRuntime().exec(new String[] {
"bash", "/ftpfile"});

C. 怎么在java中执行linux 命令 netstat -nat|grep -i "80"|wc -l

或许这就是你想要的 package question.save; import java.io.InputStreamReader; import java.io.LineNumberReader;/*** java在linux环境下执行linux命令,然后返回命令返回值。 * @author lee*/public class ExecLinuxCMD { public static Object exec(String cmd) {try {String[] cmdA = { /bin/sh, -c, cmd }; Process process = Runtime.getRuntime().exec(cmdA); LineNumberReader br = new LineNumberReader(new InputStreamReader( process.getInputStream())); StringBuffer sb = new StringBuffer(); String line; while ((line = br.readLine()) != null) { System.out.println(line); sb.append(line).append(\n);}return sb.toString(); } catch (Exception e) { e.printStackTrace();}return null;} public static void main(String[] args) { // TODO Auto-generated method stub String pwdString = exec(pwd).toString(); String netsString = exec(netstat -nat|grep -i \80\|wc -l).toString(); System.out.println(==========获得值=============); System.out.println(pwdString); System.out.println(netsString);}}输出结果:/home/lee/program/workspace/java/test20==========获得值=============

D. 如何在java程序中调用linux命令或者shell脚本

这里不得不提到java的process类了。
process这个类是一个抽象类,封装了一个进程(你在调用linux的命令或者shell脚本就是为了执行一个在linux下执行的程序,所以应该使用process类)。
process类提供了执行从进程输入,执行输出到进程,等待进程完成,检查进程的推出状态,以及shut down掉进程。
至于详细的process类的介绍放在以后介绍。
另外还要注意一个类:Runtime类,Runtime类是一个与JVM运行时环境有关的类,这个类是Singleton的。
这里用到的Runtime.getRuntime()方法是取得当前JVM的运行环境,也是java中唯一可以得到运行环境的方法。(另外,Runtime的大部分方法都是实例方法,也就是说每次运行调用的时候都需要调用到getRuntime方法)
下面说说Runtime的exec()方法,这里要注意的有一点,就是public Process exec(String [] cmdArray, String [] envp);这个方法中cmdArray是一个执行的命令和参数的字符串数组,数组的第一个元素是要执行的命令往后依次都是命令的参数,envp感觉应该和C中的execve中的环境变量是一样的,envp中使用的是name=value的方式。
下面说一下,如何使用process来调用shell脚本
例如,我需要在linux下实行linux命令:sh test.sh,下面就是执行test.sh命令的方法:
这个var参数就是日期这个201102包的名字。
String shpath="/test/test.sh"; //程序路径
Process process =null;
String command1 = “chmod 777 ” + shpath;
process = Runtime.getRuntime().exec(command1);
process.waitFor();
String var="201102"; //参数
String command2 = “/bin/sh ” + shpath + ” ” + var;
Runtime.getRuntime().exec(command2).waitFor();
注意:
1
我为什么要使用 chmod 777命令呢?在有的机器上面,可能没有设置权限问题。这是你在linux下面执行shell脚本需要注意的问题。没有的话,就需要添加权限,就用chmod 777,否则在执行到Runtime.getRuntime().exec的时侯会出现Permission denied错误。
2
waitFor()这个也是必不可缺的,如果你需要执行多行命令的话,把waitFor()这个加上。

热点内容
汉诺塔递归算法python 发布:2024-11-19 18:26:17 浏览:578
盲井ftp 发布:2024-11-19 18:21:38 浏览:264
悦虎二代安卓如何看电量 发布:2024-11-19 18:19:27 浏览:295
人工驾驶编程 发布:2024-11-19 18:05:20 浏览:271
java编程试题 发布:2024-11-19 17:26:37 浏览:664
python显示二进制文件 发布:2024-11-19 17:26:36 浏览:147
excel中编程 发布:2024-11-19 17:23:32 浏览:549
android透明图片 发布:2024-11-19 17:01:50 浏览:163
iis上传文件限制 发布:2024-11-19 16:37:55 浏览:409
面试题算法 发布:2024-11-19 16:30:25 浏览:549