shell获取java返回值
㈠ shell脚本调java程序,获取JAVA程序返回值并echo输出
先运行java程序,然后用echo $?获取程序的运行结果,如果是字符串,可以使用
result=$(java -jar xxx.jar)来获取,当然这只是示例,$()中的命令使可以随便修改的
㈡ java 怎么取外部程序运行后的返回值
JAVA 中 process 类的使用
Process是一个抽象类 封装了一个进程
创建 process
Process p = Runtime.getRuntime().exec(cmd); cmd 是字符串类型 也可以是字符串类型的数组 内容就是 命令行
Process p =ProcessBuilder.start();
Process 类提供了子进程的输入流,子进程的输出流子进程的输入流,等待进程完成,检查进程的退出状态以及销毁进程的方法;
创建的子进程没有自己的控制台或终端,其所有的io操作都是通过(输入流、输出流、错误流)重定向到父进程中。
destroy()
杀掉子进程。
exitValue()
返回子进程的出口值。
InputStream getErrorStream()
获得子进程的错误流。
InputStream getInputStream()
获得子进程的输入流。
OutputStream getOutputStream()
获得子进程的输出流。
waitFor()
导致当前线程等待,如果必要,一直要等到由该 Process 对象表示的进程已经终止。
-------分割线,以上来自网络-------
其中的exitValue()函数返回值就是你需要的东西。按照你的示例,return 12345,取得的值不一定等于12345,因为每个不同的shell对于程序退出的返回值是有自己的定义的,不一定是把程序return的值直接返回。可以查看各类shell的编程帮助。
㈢ 急,java中telnet访问远程电脑,然后执行cmd命令,再获取返回值。
需要个jar包:commons-net-3.3-bin.zip
下载地址:http://commons.apache.org/proper/commons-net/download_net.cgi
你找的代码我修改过了,复制直接使用。linux系统需要先开启telnet服务
//执行的命令
System.out.println(she.sendCommand("ll"));
这个输入linux 命令
importjava.io.InputStream;
importjava.io.PrintStream;
importorg.apache.commons.net.telnet.TelnetClient;
publicclassShell{
privateTelnetClienttelnet=newTelnetClient();
privateInputStreamin;
privatePrintStreamout;
privatecharprompt='$';//普通用户结束
publicShell(Stringip,intport,Stringuser,Stringpassword){
try{
telnet.connect(ip,port);
in=telnet.getInputStream();
out=newPrintStream(telnet.getOutputStream());
//根据root用户设置结束符
this.prompt=user.equals("root")?'#':'>';
login(user,password);
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*登录
*
*@paramuser
*@parampassword
*/
publicvoidlogin(Stringuser,Stringpassword){
//read()Until("login:");
readUntil("login:");
write(user);
readUntil("Password:");
write(password);
readUntil(prompt+"");
}
/**
*读取分析结果
*
*@parampattern
*@return
*/
publicStringreadUntil(Stringpattern){
try{
charlastChar=pattern.charAt(pattern.length()-1);
StringBuffersb=newStringBuffer();
charch=(char)in.read();
while(true){
sb.append(ch);
if(ch==lastChar){
if(sb.toString().endsWith(pattern)){
returnsb.toString();
}
}
ch=(char)in.read();
System.out.print(ch);
}
}catch(Exceptione){
e.printStackTrace();
}
returnnull;
}
/**
*写操作
*
*@paramvalue
*/
publicvoidwrite(Stringvalue){
try{
out.println(value);
out.flush();
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*向目标发送命令字符串
*
*@paramcommand
*@return
*/
publicStringsendCommand(Stringcommand){
try{
write(command);
returnreadUntil(prompt+"");
}catch(Exceptione){
e.printStackTrace();
}
returnnull;
}
/**
*关闭连接
*/
publicvoiddisconnect(){
try{
telnet.disconnect();
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
// TelnetClienttelnet=newTelnetClient();
try{
Shellshe=newShell("192.168.1.10",23,"root","123456");
System.out.println(she);
//执行的命令
System.out.println(she.sendCommand("ll"));
she.disconnect();
}catch(Exceptione){
//TODO:handleexception
}
}
}
㈣ shell里判断返回值的问题
你不要输出结果,那就将结果重定向至 /dev/null 即可,具体代码就是:
你的命令后面加上 >/dev/null 就不会有输出结果了。举个简单的例子:
ping -c 192.168.1.1 这个命令,用于判断到这个IP是否畅通,如果你在后面不加上重定向。
那么每次都会输出结果,也就是你现在的情况。所以下面代码我就在ping的后面加上了重定向
代码,让结果屏蔽,仅获取返回值$?,那屏幕上就不会显示ping的结果了,只会显示下面判断结果,懂了么?
#!/bin/bash
ping-c2192.168.1.1>/dev/null
if[$?-eq0];then
echo192.168.1.1isokey!
else
echo192.168.1.1isfailed!
fi
㈤ 每天三分钟搞定linux shell脚本26 函数返回值
函数可以产生返回值,有3个方法。
1)默认情况下是 最后一条语句对应的退出状态码
2) return 一个整数值
3)使用 echo语句 指定输出
针对 方法1 建立如下脚本:
运行后输出结果为:
针对 方法2 建立脚本:
运行后结果为:
针对 方法3 建立脚本
运行后输出结果为:
方法3使用echo语句来返回结果,而且 并没有把这个输出到stdout 中。
函数返回数组与参数传递数组一样,使用echo语句。举例如下:
运行后输出结果为:
㈥ 怎么设置awk的返回值然后让shell获取
cnbubble@~/test:$catrr.sh
#!/bin/bash
functionergodic(){
forfilein`ls$1`
do
if[-d"$1/"$file]
then
echo"$1/$file"
ergodic"$1/$file"
#else
#echo$file
fi
done
}
ergodic"/home/cnbubble"
cnbubble@~/test:$a=`awk'BEGIN{sum=0}{sum=sum+NF}END{printsum}'rr.sh`
cnbubble@~/test:$echo$a
30
上面例子中统计了rr.sh文件每行的字段(默认空格分割)数量,进行了累加求和。最后赋值给了Shell中的变量a
一般shell使用awk的结果通常是 将awk语句用 ` …… `括起来(键盘上Tab上面的那个键)
其他例子:
ls `awk……`
grep `awk……` fileName
㈦ java调用shell脚本,并得到shell脚本的返回值
文件名确实不对
.sh文件才是linux下的批处理文件,它不认bat的
另外要保证.sh中调用的其他函数在当前目录下能正常运行