如何在shell脚本中检查软件版本?

时间:2014-08-16 01:36:14

标签: bash shell sh

我的bash脚本中有两个软件版本检查无法正常工作。

DRUSH_VERSION="$(drush --version)"
echo ${DRUSH_VERSION}
if [[ "$DRUSH_VERSION" == "Drush Version"* ]]; then
    echo "Drush is installed"
  else
    echo "Drush is NOT installed"
fi
GIT_VERSION="$(git --version)"
echo ${GIT_VERSION}
if [[ "GIT_VERSION" == "git version"* ]]; then
    echo "Git is installed"
  else
    echo "Git is NOT installed"
fi

响应:

Drush Version : 6.3.0
Drush is NOT installed
git version 1.8.5.2 (Apple Git-48)
Git is NOT installed

同时,如果我改变

  

DRUSH_VERSION =“$ {drush --version)”

  

DRUSH_VERSION =“Drush Version:6.3.0”

回应
  

已安装Drush

现在我将使用

  

如果输入-p drush;

但我仍想获得版本号。

2 个答案:

答案 0 :(得分:2)

您可以解决几个问题。首先,如果您不关心可移植性,那么您希望使用子字符串匹配运算符=~而不是==。这将在git version中找到git version 1.8.5.2 (Apple Git-48)。其次,您在$测试中遗漏了[[ "GIT_VERSION" == "git version" ]]

因此,例如,如果您按如下方式更改测试,则可以匹配子字符串。 (注意: =~仅适用于[[ ]]运算符,您需要删除任何通配符*)。

if [[ "$DRUSH_VERSION" =~ "Drush Version" ]]; then
...
if [[ "$GIT_VERSION" =~ "git version" ]]; then
...

此外,如果您只是检查程序的存在而不是特定的版本号,那么您最好使用:

if which $prog_name 2>/dev/null; then...

或使用复合命令:

which $prog_name && do something found || do something not found

E.g。 git

if which git 2>/dev/null; then
...

which git && echo "git found" || echo "git NOT found"

注意:stderr重定向到/dev/null只是为了防止在系统中不存在$prog_name的情况下错误在屏幕上喷出

答案 1 :(得分:1)

您没有在 if 条件中将其作为变量引用,例如 ${DRUSH_VERSION} 而不是 "$DRUSH_VERSION"