迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

检查 Bash 中是否存在命令

作者:迹忆客 最近更新:2023/05/19 浏览次数:

可能需要使用 Bash 脚本或编程来验证命令、程序或文件是否存在。 本文将采用多种方法来满足这一需求。

我们可以在 Bash 中使用不同的内置命令来检查命令是否存在。 下面演示了这些命令的使用。


使用命令 -v 命令检查 Bash 中是否存在命令

命令 -v 是所有 POSIX 系统和 Bash 中的内置函数。 此函数检查命令是否存在,如果它存在则返回该命令的有效路径,如果不存在则返回 NULL。

例如:

command -v ls

输出:

/bin/ls

命令 -v 也可以在 Bash 脚本中安全地使用,以检查带有 if 条件的命令是否存在,如下所示。

if ! [ -x "$(command -v npm)" ]; then
  echo 'Error: npm is not installed.' >&2
  exit 1
fi

上面的代码将检查 npm 是否已安装,即是否存在于用户目录中以及它是否可执行。 如果在 Path 上找不到 npm,上面的代码将引发异常并终止。

上面的模板可用于通过使用该程序/命令/实用程序的名称来检查该程序/命令/实用程序是否存在。


使用 type 命令检查 Bash 中是否存在命令

type 命令是一个非常有用的内置命令,它提供有关它使用的实体的信息。 它可以与命令、文件、关键字、shell 内置命令等一起使用。

type 命令的使用如下所示。

type command

输出:

command is a shell builtin

更具体地说,对于我们的用例,我们可以使用带有 -p 选项的 type 命令来获取文件或可执行文件的路径。 下面演示了它的使用。

type -p npm

输出:

/usr/local/bin/npm

由于 npm 安装在我们的系统上,type -p 返回了它的有效路径。 重要的是要注意,如果 type 命令(没有任何标志)与不存在的实体一起使用,则会引发错误; 但是,在相同情况下键入 -p 将返回 NULL。

下面演示了此行为。

type yarn

输出:

bash: type: yarn: not found

由于 yarn 未安装在我们的系统上,因此返回错误。 但是,type -p yarn 没有返回任何输出; 根据需要检查程序存在的方式和原因,可以使用或省略 -p 标志。


使用 hash 命令检查 Bash 中是否存在命令

hash 命令的工作方式类似于 type 命令。 但是,如果找不到该命令,它会成功退出。

此外,它还有一个额外的好处,即对查询的命令进行散列处理,从而加快查找速度。

该命令的语法如下。

hash -t ls

在这种情况下,查询命令是 ls。 根据您的系统,输出将类似于以下内容。

/usr/bin/ls

这是调用命令时运行的文件位置。 如果未找到该命令,例如,当查询类似于:hash -t nothing,则输出将如下所示。

bash: hash: nothing: not found

找到命令时的输出是描述性的,并提供散列命令的额外好处,以便下次更快地搜索。


使用 test 命令检查 Bash 中是否存在命令

test是一个内置的shell命令,主要用于比较和条件语句; 它还可用于检查文件和目录是否存在; 重要的是要注意,只有在提供了要检查的文件或目录的完整有效路径时,测试才有效。

与文件和目录相关的测试命令有很多选项标志,这些选项标志的列表如下所示。

需要注意的是,这些标志仅在文件存在且满足特殊条件时才返回真。 您可以在下面找到列出的特殊条件。

  • -b FILE - 如果文件是一个特殊的块文件则为真。
  • -c FILE - 如果文件是特殊字符文件则为真。
  • -d FILE - 如果它是一个目录则为真。
  • -e FILE - 如果它是文件则为真,无论类型如何。
  • -f FILE - 仅当它是常规文件(例如,不是目录或设备)时才为真。
  • -G FILE - 如果文件与执行命令的用户具有相同的组,则为真。
  • -h FILE - 如果它是符号链接则为真。
  • -g FILE - 如果设置了 set-group-id (sgid) 标志则为真。
  • -k FILE - 如果设置了粘性位标志则为真。
  • -L FILE - 如果它是符号链接则为真。
  • -O FILE - 如果它由运行命令的用户拥有则为真。
  • -p FILE - 如果它是一个管道则为真。
  • -r FILE - 如果可读则为真。
  • -S FILE - 如果它是套接字则为真。
  • -s FILE - 如果它有一些非零大小则为真。
  • -u FILE - 如果设置了 set-user-id (suid) 标志则为真。
  • -w FILE - 如果可写则为真。
  • -x FILE - 如果它是可执行的则为真。

在此示例中,FILE 表示用户要检查的文件的完整有效路径。

下面显示了使用测试来检查文件是否存在。

test -e etc/random.txt && echo "FILE exists."

上面的代码语句将检查文件 etc/random.txt 是否存在,如果测试语句返回 true,则输出 FILE exists。

上一篇:在 Linux 中添加新用户的 Bash 脚本

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Linux 中添加新用户的 Bash 脚本

发布时间:2023/05/20 浏览次数:54 分类:操作系统

这篇简短的文章是关于创建一个 Bash 脚本,该脚本可以自动为 Linux 操作系统添加用户和分配密码。 在 Linux 操作系统中,useradd 命令用于添加新用户并为他们提供密码。Bash 脚本 useradd 命令

Bash 脚本中的变量插值

发布时间:2023/05/18 浏览次数:79 分类:操作系统

本文是关于在 Bash 脚本中使用变量以及如何在 Bash 脚本中插入这些变量。Bash 脚本中的变量。每种编程语言都有具有特定数据类型的变量。

在 Bash 脚本中执行变量中的命令

发布时间:2023/05/18 浏览次数:108 分类:操作系统

本篇文章是关于将 Bash 命令存储在一个变量中,然后直接从这个变量中执行它。 首先,我们将讨论执行变量中包含的命令的多种方法,然后是几个脚本示例。

在 Bash 脚本中运行 GDB

发布时间:2023/03/17 浏览次数:105 分类:编程语言

本教程演示了如何在 bash 脚本中运行 gdb,该脚本带有一个接受命令行参数的二进制文件。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便