Как проверить версию Java с помощью Bash Shell? - PullRequest
0 голосов
/ 03 июля 2019

Я очень плохо знаком с сценариями оболочки.Я хочу проверить следующее:

  1. Независимо от того, является ли пользователь su или нет.
  2. Если su, то присутствует команда systemctl или нет
  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

* 1025 приходит следующая ошибка*installNew.sh: 34: installNew.sh: [[: not found

Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

После того, как вы выяснили проблему неправильной оболочки, выполняющей ваш скрипт, как упоминал Гленн Джекман, будьте осторожны со строкой

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

- обычная команда test [ не интерпретирует > как оператор больше , а скорее как перенаправление вывода, поэтому вы получите пустой файл «1.8» и, что еще хуже, тест выдает true для любой непустой "$ version". Использование [[ должно работать как положено.

0 голосов
/ 03 июля 2019

Посмотрите весь мой скрипт 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...