检查Java是否通过Bash安装而不起作用



我正在通过bash自动化一些事情,我希望做的事情之一是只有在条件为false时才执行某个命令。

我写了这个小脚本来检查机器上是否存在java,如果不存在,则在机器上安装java:

#!/bin/bash
java_path=$(which java) 
if [ "$java_path" = "/usr/bin/java" ]; then
printf "nJava Installed, version:n"
java -version
else
printf "nJava Not Installed, Installing...n"
#sudo amazon-linux-extras install java-openjdk11
java -version
fi

我的问题是,代码总是沿着else路径运行,即使当我通过命令行执行which java时,我也会得到usr/bin/java

我做错了什么?

which的退出状态可以在if-else语句中使用,无需保存输出。

if which java > /dev/null 2>&1; then
java -version
else
echo "Java not installed"
fi

您可以使用这个:

#!/bin/bash
#
if [[ $(which java) == "/usr/bin/java" ]]
then
printf "nJava Installed, version:n"
java -version
else
printf "nJava Not Installed, Installing...n"
fi

由于您假设java将在/usr/bin中,因此您只考虑通过官方软件包进行安装。您可以检查软件包是否已安装。

为了涵盖所有情况,您可以:

  • 检查软件包是否已安装
  • 检查which java是否返回了什么
  • 运行find以查看它是否在系统的其他位置

最新更新