linux - 如何使用 Bash Shell 检查 Java 版本?
问题描述
我对 shell 脚本非常陌生。我想检查以下内容:
- 用户是否
su
存在。 - 如果
su
thensystemctl
命令存在或不存在 - 如果已安装,则是否安装了 java
- 如果已安装,则版本是否为 1.8 或更高版本
- 如果更多,那么它是否是Oracle Java
- 如果 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
任何人都可以帮忙吗?
解决方案
在您解决了执行脚本的错误 shell 的问题之后,正如 glenn jackman 所提到的,请谨慎使用该行
if [ "$version" > "1.8" ]; then
- 普通test
命令[
不解释>
为大于运算符,而是作为输出重定向,所以你会得到一个空文件“1.8”,更糟糕的是,对于任何非空的“$version” ,测试结果为真. 使用[[
应该按预期工作。
推荐阅读
- python - 为每个类拆分具有相等行数的训练数据
- elasticsearch - Spring-data-elasticSearch:已超出索引 [] 中总字段 [1000] 的限制,
- windows - Windows 服务和 WINFORMS 应用程序之间的双向通信
- internet-explorer - SVG with width:auto 不影响 IE11 中包含锚标记的宽度
- bash - 无法使用 tee 命令一次清空多个文件
- python-3.x - 无论python版本如何,如何在一行中打印可迭代?
- apache-spark - 无法从 spark 插入 hive 分区表
- css - 对于 CSS 动画,我可以指定一个已经指定的 CSS 块作为目标吗?
- vue.js - 绑定到外部变量的数据属性对变量更改没有反应
- c++ - 从 Character 类中分离 HP 和 Attack 变量?在 C++ 中