如何从Java程序返回一个布尔值到CentOS shell脚本?

在CentOS 7服务器上运行的shell脚本需要将三个parameter passing给java程序,然后读取Java程序返回的布尔值,作为对三个参数进行的操作的结果。 为了将布尔值返回到shell脚本中,需要对下面的代码进行哪些特定的更改?

这是shell脚本的第一次尝试:

#!/bin/bash ARG0=0 ARG1=0 ARG2=0 CLASSPATH=/path/to/classes echo -n "Enter zeroth arg: " read ARG0 echo -n "Enter first arg: " read ARG1 echo -n "Enter second arg: " read ARG2 java -cp $CLASSPATH my.package.SomeClass[ARG0, ARG1, ARG2] #How do I return the Boolean from the Java class into this shell script 

这里是Java类:

 public class SomeClass { private static Boolean passes = false; public static void main(String[] args) { String arg0 = null; String arg1 = null; String arg2 = null; for (int i = 0; i < args.length; i++){ if(i==0){arg0=args[i];} if(i==1){arg1=args[i];} if(i==2){arg2=args[i];} } if(!arg0.equals(null) && !arg1.equals(null) && !arg2.equals(null)){ passes = doSomeTest(arg0, arg1, arg2); } else{passes = false;} } public static boolean doSomeTest(String arg0, String arg1, String arg2){ if(passes_test){return true;} else{return false;} } public static boolean getPasses(){return passes;} } 

您可以使用System.exit(int)函数返回状态码。 这是做,而不是main返回一个int ,如在C,C + +,C#等

通常情况下, 0表示成功,其他意味着失败。

在这里,它看起来像在你的main方法的结尾你想System.exit(passes ? 0 : 1);

在bash中,您可以使用$?读取状态码$? 变量。 如何使用它真的取决于,以后如何在脚本中使用它。 但是,您不需要更改启动Java程序的行中的任何内容。

如果你想要一个基于你的Java程序的状态码的条件,你可以在你的java -cp ... call之后执行以下操作:

 if [ $? -eq 0 ] then abc else xyz fi 

一个java程序可以通过显式调用System.exit(ret_value)返回一个值,其中ret_value是一个整数。 所以,你可以在main的最后做到这一点:

 int ret = passes ? 1 : 0; System.exit(ret);