如何检查bash脚本中的依赖项

时间:2015-10-23 08:24:21

标签: linux bash

我想检查一下是否在系统上安装了nodejs。我收到了这个错误:

  

错误:找不到命令。

我该如何解决?

#!/bin/bash

if [ nodejs -v ]; then
echo "nodejs found"
else
echo "nodejs not found"
fi

5 个答案:

答案 0 :(得分:10)

您可以使用command bash builtin

if command -v nodejs >/dev/null 2>&1 ; then
    echo "nodejs found"
    echo "version: $(nodejs -v)"
else
    echo "nodejs not found"
fi

答案 1 :(得分:2)

如果您只想检查命令是否存在,请使用哪个命令。如果调用该命令,它将返回补丁,如果未找到,则返回任何内容

if [ "$(which openssl)" = "" ] ;then
echo "This script requires openssl, please resolve and try again."
exit 1
fi

答案 2 :(得分:0)

您可以通过

检查程序或功能的存在
type nodejs &>/dev/null || echo "node js not installed"

但是,有一个更复杂的解释here

答案 3 :(得分:0)

命令的名称为node,而不是nodejs

返回stdout命令的路径(如果存在)

if [ $(which node 2>/dev/null) ]; then
  echo "nodejs found"
else
  echo "nodejs not found"
fi

答案 4 :(得分:0)

这不是OP要求的(将近3年前!),但是对于想要检查多个依赖项的任何人而言:

#!/bin/bash
echo -n "Checking dependencies... "
for name in youtube-dl yad ffmpeg
do
  [[ $(which $name 2>/dev/null) ]] || { echo -en "\n$name needs to be installed. Use 'sudo apt-get install $name'";deps=1; }
done
[[ $deps -ne 1 ]] && echo "OK" || { echo -en "\nInstall the above and rerun this script\n";exit 1; }

这是它的工作方式。首先,我们打印一行以表示我们正在检查依赖关系。第二行开始“ for name in ...”循环,在其中放入我们要检查的依赖项,在此示例中,我们将检查youtube-dl,yad和ffmpeg。循环开始(以“ do”开始),下一行使用bash命令“ which”检查每个命令是否存在。如果已经安装了依赖项,则不执行任何操作,我们跳到循环中的下一个命令。如果确实需要安装,则会显示一条消息,并将变量“ deps”设置为1(deps =依赖项),然后我们继续执行下一个命令进行检查。在检查了所有命令之后,最后一行通过检查deps变量来检查是否需要任何依赖项。如果未设置,则将“确定”追加到最初显示“检查依赖项...”的行,然后继续(假设这是脚本的第一部分)。如果已设置,它将打印一条消息,要求安装依赖项并重新运行脚本。然后退出脚本。

echo命令看起来很复杂,但是它们对于在终端上提供干净的输出是必需的。这是一个屏幕截图,显示了第一次运行时不满足依赖项,但是第二次运行时就满足了。

Bash dependency check script screen print

PS如果将其另存为脚本,则需要与脚本位于同一目录,然后键入./{name_of_your_script},并且必须是可执行文件。