【问题标题】:How to check Java version using Bash Shell?如何使用 Bash Shell 检查 Java 版本?
【发布时间】:2019-07-03 14:12:38
【问题描述】:

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

  1. 用户是否为su
  2. 如果susystemctl 命令存在与否
  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

谁能帮忙?

【问题讨论】:

  • 不要像sh installNew.sh那样调用你的脚本,你必须专门使用bash。
  • 基于上面的评论,如果你先跳到一个新的bash shell 然后运行脚本会发生什么?
  • 与你的主要问题无关,但是:1)你检查了 uid=0,所以你不需要sudo 2)systemd 是系统的一个非常核心的部分,所以@987654330 @真的不是你应该通过安装java来做的事情。
  • su 到什么?您可以使用su 更改为系统中的任何用户。是否要检查超级用户权限?

标签: linux bash shell unix


【解决方案1】:

看看我的整个脚本 https://github.com/darshanpatidar1/Environment-Setup/blob/master/version.sh 用于检查 Java、Python 等的版本

#!/bin/bash
#echo "Checking java JDK version"
#command -v javac >/dev/null 2>&1 || { echo >&2 "Java JDK is not installed"; }
#variables
        purge_='sudo apt-get purge '
        update_='sudo apt update '
        install_='sudo apt install ' 

#checking for java files and exe
echo Java JRE -
if type -p 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 "no JRE found"
fi

if [[ "$_java" ]]; then
    version=$("$_java" -version 2>&1 | awk -F '"' '/version/ {print $2}')
    echo Version "$version"
fi

echo
echo Java JDK -
if type -p javac; then
    echo Found Javac executable in PATH
    _javac=javac  
elif [[ -n $JAVA_HOME ]] && [[ -x "$JAVA_HOME/bin/javac" ]];  then
    echo Found Javac executable in JAVA_HOME
    _javac="$JAVA_HOME/bin/javac"
else
    echo "no JDK found"
    echo "Previous Java JDK files will also be removed in installation."
    read -r -p "Do you want to install it now? [y/N] " response
    if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]
    then
            echo "Installing Java JDK "
        $purge_ 'java openjdk-*'
        $update_
        $install_ java -y
    else
           echo "Installation aborted !"
           exit
    fi
fi

if [[ "$_javac" ]]; then
    version=$("$_javac" -version 2>&1   | awk '{print $2}')
    echo Version "$version"
fi
#javac -version 2>&1 | head -n 1
#end of java

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 2012-05-23
      • 2014-09-27
      • 1970-01-01
      • 2023-01-18
      • 2020-10-16
      • 2011-08-31
      相关资源
      最近更新 更多