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

xriantvc  于 2022-11-07  发布在  Java
关注(0)|答案(2)|浏览(142)

在CentOS 7服务器上运行的shell脚本需要将三个参数传递给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;}

}
sbtkgmzw

sbtkgmzw1#

你可以使用System.exit(int)函数返回一个状态代码,而不是main返回一个int,如C、C++、C#等。
通常,0意味着成功,其他任何东西都意味着失败。
在这里,看起来在main方法的末尾,您将需要System.exit(passes ? 0 : 1);
在bash中,你可以通过使用$?变量来读取状态代码。如何使用它实际上取决于你稍后在脚本中如何使用它。但是,你不需要在Java程序的启动行中做任何修改。
如果您想要基于Java程序的状态代码的条件,可以在java -cp ...调用后执行以下操作:

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

kx5bkwkv2#

java程序可以通过显式调用System.exit(ret_value)来返回一个值,其中ret_value是一个整数。因此,您可以在main的末尾这样做:

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

相关问题