首页 > 解决方案 > 如何使用 Bash Shell 检查 Java 版本?

问题描述

我对 shell 脚本非常陌生。我想检查以下内容:

  1. 用户是否su存在。
  2. 如果suthensystemctl命令存在或不存在
  3. 如果已安装,则是否安装了 java
  4. 如果已安装,则版本是否为 1.8 或更高版本
  5. 如果更多,那么它是否是Oracle Java
  6. 如果 Oracle Java 然后运行一个 jar

我做了以下事情:

#!/bin/bash
if ! [ $(id -u) = 0 ]; then
   echo "User not logged in as Root!"
   exit 1
fi

if command -v systemctl; then
    echo Found systemctl
else
    sudo apt-get install systemd 
fi   

if type java | grep -q 'java' ; then
    echo Found java executable in PATH
    _java=java


elif [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]];  then
    echo Found java executable in JAVA_HOME     
    _java="$JAVA_HOME/bin/java"

else
    echo "Java is not installed. Please install JAVA 1.8 or upper version"
    exit 1
fi

if [ ! -z "$_java" ]; then

    version=$("$_java" -version 2>&1 | awk -F '"' '/version/ {print $2}')
    echo version "$version"
    if [ "$version" > "1.8" ]; then
        echo Java version is more than 1.8

        if [[ $("$_java" -version 2>&1) != *"Java(TM)"* ]]; then  #Problem is here
      #  if [ $("$_java" -version 2>&1) | grep -q 'Java(TM)' ]; then 
           echo "Oracle JRE is installed" 
           java -jar myJar-0.0.1-SNAPSHOT.jar
        else
           echo "Oracle JRE is not installed" ;           
        fi


    else         
        echo Java version is less than 1.8        
        echo "Please install JAVA 1.8 or upper version"
        exit 1
    fi
else
    exit 1
fi

当我执行它时,以下错误来自该行if [[ $("$_java" -version 2>&1) != *"Java(TM)"* ]]; then

installNew.sh: 34: installNew.sh: [[: not found

任何人都可以帮忙吗?

标签: linuxbashshellunix

解决方案


在您解决了执行脚本的错误 shell 的问题之后,正如 glenn jackman 所提到的,请谨慎使用该行

    if [ "$version" > "1.8" ]; then

- 普通test命令[不解释>大于运算符,而是作为输出重定向,所以你会得到一个空文件“1.8”,更糟糕的是,对于任何非空的“$version” ,测试结果为. 使用[[应该按预期工作。


推荐阅读