如何查看目录是否存在?

如何查看目录是否存在?

如何检查/bin/x86_64/bin/lsbash shell 脚本中是否是一个目录

这是我尝试过的:

#!/bin/bash

if [ $# -eq 2 ]; then
    if [[ "$1" = /* ]]
    then
    cd ./bin/x86_64/bin/ls
        if [ -d "$1" ]; then
            echo "ok"
            i="$1"
            echo $i
        else
            echo "error2"
            exit
        fi
    else
        echo "error"
        exit
    fi
fi

答案1

您可以使用以下命令来检查目录是否存在:

if [[ -d "$1" ]]; then

如果您想检查您将使用的任何文件

if [[ -e "$1" || -L "$1" ]]; then

如果您想检查文件是否是常规文件(或常规文件的符号链接),但不是目录(或设备、套接字、命名管道...)文件,那么您可以使用:

if [[ -f "$1" ]]; then

如果文件可能存在但您想确保它的大小不为零:

if [[ -s "$1" ]] then;

所有这些测试都基于stat()系统调用的结果(除了-L依赖lstat())。如果您无权对文件进行此类调用(例如,因为您没有对文件所在目录或参与符号链接文件解析的目录的搜索访问权限),那么这些测试将默默返回 false,就好像文件不存在一样。

[[ ... ]]是一个运算符,也受andksh支持。标准等效项(在 中使用)是使用命令(对于上面的第二个示例,使用)。bashzshsh[[ -e "$1" ] || [ -L "$1" ]

答案2

如果您的目录cd确实存在,您的代码就可以工作。

我将该cd行更改为系统上的目录(diff):

-    cd ./bin/x86_64/bin/ls
+    cd /bin/

然后跑:

ry@~/Desktop:$ sh test /bin /
ok
/bin

请注意,您必须为脚本提供两个参数,因为:if [ $# -eq 2 ]; then

另请注意,./bin/实际上与 相同bin/

答案3

要检查 shell 脚本中是否存在目录,可以使用以下命令:

dir=$1

if [ -d "$dir" ]; then

 #means that $dir exists.

fi

要检查相反的情况,请添加!在 -d -> 之前[ ! -d ....]

相关内容