检查 Bash 中是否存在命令
可能需要使用 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 脚本
发布时间:2023/05/20 浏览次数:54 分类:操作系统
-
这篇简短的文章是关于创建一个 Bash 脚本,该脚本可以自动为 Linux 操作系统添加用户和分配密码。 在 Linux 操作系统中,useradd 命令用于添加新用户并为他们提供密码。Bash 脚本 useradd 命令
Bash 脚本中的变量插值
发布时间:2023/05/18 浏览次数:79 分类:操作系统
-
本文是关于在 Bash 脚本中使用变量以及如何在 Bash 脚本中插入这些变量。Bash 脚本中的变量。每种编程语言都有具有特定数据类型的变量。
在 Bash 脚本中执行变量中的命令
发布时间:2023/05/18 浏览次数:108 分类:操作系统
-
本篇文章是关于将 Bash 命令存储在一个变量中,然后直接从这个变量中执行它。 首先,我们将讨论执行变量中包含的命令的多种方法,然后是几个脚本示例。