我正在通过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
以查看它是否在系统的其他位置