java调shell脚本返回值

本文介绍了在实际开发中如何通过Java调用Shell脚本并获取其返回值,提供了一个实用的工具类,适用于后续的开发工作。

实际开发中,经常会遇到java需要调用/得到shell脚本的返回值,进行下一步开发,所以我写了一个工具类,供以后大家使用。

process2.sh:

#!/bin/bash
function process(){
    #echo $1,$2,$3,$4,$5
    #if [[ $1 -eq 0 && $2 -eq 0 && $3 -eq 1 && $4 -eq 1 && $5 -eq 1 ]]
    #then
        #return 200
    #fi

    if [[ $1 -eq 0 && $2 -eq 0 && $3 -eq 2 && $4 -eq 2 && $5 -eq 2 ]]
    then
        #return 0
        echo 0
    fi

    if [[ $1 -lt 1 && $2 -lt 1 ]]
    then
        if [[ $3 -eq 1 || $4 -eq 1 || $5 -eq 1 ]]
        then
            killall 雪盈证券
            killall stockAlert
            ps -ef|grep chromedriver|awk '{print $2}'|xargs kill -9
            sleep 1
            nohup /Users/a123/Downloads/chromedriver-v10.1.2-mas-x64/chromedriver >> chromedivier.out &
            sleep 1
            nohup java -jar stockAlert-1.0-SNAPSHOT-jar-with-dependencies.jar >> stockAlert.out &
            sleep 1
            echo "" > ./stock_log_file.log
            sleep 1
            #return 2
            echo 2
        fi

        if [[ $3 -gt 2 || $4 -gt 2 || $5 -gt 2 ]]
        then
            killall stockAlert
            killall 雪盈证券
            #killall chromedriver
            ps -ef|grep chromedriver|awk '{print $2}'|xargs kill -9
            sleep 1
            nohup /Users/a123/Downloads/chromedriver-v10.1.2-mas-x64/chromedriver >> chromedivier.out &
            sleep 1
            nohup java -jar stockAlert-1.0-SNAPSHOT-jar-with-dependencies.jar >> stockAlert.out &
            sleep 1
            echo "" > ./stock_log_file.log
            sleep 1
            #return 3
            echo 3
        fi


    fi

    if [[ $1 -eq 1 || $2 -eq 1 ]]
    then
        #echo 'stock-realtime-web disconnect!!!!'
        #echo 'restart service'
        killall stockAlert
        killall 雪盈证券
        #killall chromedriver
        ps -ef|grep chromedriver|awk '{print $2}'|xargs kill -9
        sleep 1
        nohup /Users/a123/Downloads/chromedriver-v10.1.2-mas-x64/chromedriver >> chromedivier.out &
        sleep 1
        nohup java -jar stockAlert-1.0-SNAPSHOT-jar-with-dependencies.jar >> stockAlert.out &
        sleep 1
        echo "" > ./stock_log_file.log
        sleep 1
        #return 3
        echo 3
    fi

    if [[ $1 -gt 1 || $2 -gt 1 ]]
    then
        #echo 'connect disconnected or refused'
        killall stockAlert
        killall 雪盈证券
        #killall chromedriver
        ps -ef|grep chromedriver|awk '{print $2}'|xargs kill -9
        sleep 1
        nohup /Users/a123/Downloads/chromedriver-v10.1.2-mas-x64/chromedriver >> chromedivier.out &
        sleep 1
        nohup java -jar stockAlert-1.0-SNAPSHOT-jar-with-dependencies.jar >> stockAlert.out &
        sleep 1
        echo "" > ./stock_log_file.log
        sleep 1
        #return 3
        echo 3
    fi

}


killall 雪盈证券
killall stockAlert
ps -ef|grep chromedriver|awk '{print $2}'|xargs kill -9

counter=`rg -w "stock-realtime-web disconnect" ./stockAlert.out | tail -n 1 | wc -l`
counter2=`rg -w "Connection refused" ./stockAlert.out | tail -n 1 | wc -l`
counter3=`ps -ef|grep "雪盈证券"|awk '{print $2}'|wc -l`
counter4=`ps -ef|grep "stockAlert"|awk '{print $2}'|wc -l`
counter5=`ps -ef|grep "chromedriver"|awk '{print $2}'|wc -l`
#echo $counter,$counter2,$counter3,$counter4,$counter5

process ${counter} ${counter2} ${counter3} ${counter4} ${counter5}
#res=`echo $?`
#echo res=${res}
//首先java调用shell脚本,即先触发客户端保护机制
            String command="sh /Users/a123/Downloads/process2.sh";
            //retCode = 0表示正常,没有触发客户端保护机制
            int retCode = Integer.parseInt(CommandHelper.execCommand(command).trim());
//            int retCode=JaveShellUtil.ExecCommand(command);
            System.out.println("返回码retCode="+retCode);

            //说明触发了客户端保护机制
            if(retCode > 0){
                System.out.println("触发保护机制了");
                Thread.sleep(10000);
            }
CommandHelper:
import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 * 此类用来执行Command命令
 *
 * @author zhangyuexu
 * @date 2021-02-08 14:16
 *
 */
public class CommandHelper {
    public static String execCommand(String cmd) {
        Process process = null;
        BufferedReader br = null;
        StringBuilder sb = new StringBuilder();
        try {
            process = Runtime.getRuntime().exec(cmd);
            br = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = br.readLine()) != null) {
//                System.out.println(line);
                sb.append(line+"\n");
            }
        } catch (Exception e) {
            return "";
        } finally {
            try {
                if (process != null) {
                    process.destroy();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        String command="sh /Users/xueqiu/Desktop/xueqiu-alarm/example/src/main/resources/process2.sh";
        System.out.println(CommandHelper.execCommand(command));
    }
}

java执行shell命令/执行linux命令,得到字符串返回值:

String connectionCMD = "gtimeout 60 rg -w "+stock+ " /Users/a123/Downloads/stock_log_file.log | wc -l";
String connectionCommandResult = AlarmTest.execCommand(connectionCMD).responseMsg.trim();
if(Integer.parseInt(connectionCommandResult.trim()) < 1){
       System.out.println(stock+" stock-realtime-web disconnect="+connectionCommandResult);
        ++j;
// dataTotalMap.put(stock,"disconnect");
//表示1轮股票都没有数据 --即10支股票都没有数据
        if(j >= 10) {
            System.out.println("循环1轮即10支股票均没数据");
            dateLst.add(System.currentTimeMillis());
            dataTotalMap.put("type",1);
            symbolDateMap.put(stock,dateLst);
             symbolsLst.add(symbolDateMap);
             dataTotalMap.put("symbols",symbolsLst);
             return dataTotalMap;
           }
}


String shellCMD = "gtimeout 60 rg -w "+stock+ " /Users/a123/Downloads/stock_log_file.log | tail -n 1";

CommandResult commandResult = AlarmTest.execCommand(shellCMD);
// System.out.println(commandResult);

Thread.sleep(1000);
String s = commandResult.responseMsg;

 if(StringUtils.isEmpty(s)){
     System.out.println(stock+"为空");
//   AlarmWrapper.getInstance().sendMsg(rule, "告警:"+status+",异常报警升级,"+stock+" PANKOU,QUOTE此时均没推数据");
     dateLst.add(System.currentTimeMillis());
     dataTotalMap.put("type",1);
     symbolDateMap.put(stock,dateLst);

//  return dataTotalMap;
//continue;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值