如何检查命令是否存在于shell脚本中?

我正在编写我的第一个shell脚本。 在我的脚本中,我想检查某个命令是否存在,如果没有,请安装可执行文件。 我将如何检查该命令是否存在?

if #check that foobar command doesnt exist
then
    #now install foobar
fi

一般来说,这取决于你的shell,但是如果你使用bash,zsh,ksh或sh(由破折号提供),下面的代码应该可以工作:

if ! type "$foobar_command_name" > /dev/null; then
  # install foobar here
fi

对于真实的安装脚本,您可能想要确保在存在别名foobar的情况下该type不会成功返回。 在bash中你可以做这样的事情:

if ! foobar_loc="$(type -p "$foobar_command_name")" || [[ -z $foobar_loc ]]; then
  # install foobar here
fi

尝试使用type

type foobar

例如:

$ type ls
ls is aliased to `ls --color=auto'

$ type foobar
-bash: type: foobar: not found

出于以下几个原因, which适合:

1)默认的which实现只支持显示所有选项的-a选项,因此您必须找到替代版本来支持别名

2)类型会告诉你到底你在看什么(是一个bash函数还是一个别名或一个适当的二进制文件)。

3)类型不需要子进程

4)类型不能用二进制文件(例如,在Linux中,如果创建一个名为程序来掩盖which出现在路径上的实际之前which ,东西击中了风扇type ,在另一方面,是建立一个shell [是的,下属无意中曾经这样做过]


从Bash脚本检查程序是否存在,可以很好地解决这个问题。 在任何shell脚本中,最好运行command -v $command_name来测试是否可以运行$command_name 。 在bash中,你可以使用hash $command_name ,它也可以散列任何路径查找的结果,或者如果你只想查看二进制文件(不是函数等),则type -P $binary_name

链接地址: http://www.djcxy.com/p/57055.html

上一篇: How to check if command exists in a shell script?

下一篇: Check if a package is installed and then install it if it's not