shell脚本:如何测试单个文件的存在性

shell脚本:如何测试单个文件的存在性,shell,unix,scripting,Shell,Unix,Scripting,我正在测试特定目录中是否存在.doc文件 if [ ! -f /home/ankur/*.doc ] then echo "no doc files exist." else echo "files exist" fi 现在,如果不存在任何文档文件或单个文档文件,则可以正常工作。 但如果有多个文档文件,它仍然在工作,但会抛出“参数太多”的警告。 那么,如何测试多个文档文件的存在性呢。谢谢在您的评论中,您将原始问题扩展为: 我想要的是,它检查文件并最终生成一个结果

我正在测试特定目录中是否存在.doc文件

    if [ ! -f /home/ankur/*.doc ]
    then echo "no doc files exist."
    else echo "files exist"
    fi
现在,如果不存在任何文档文件或单个文档文件,则可以正常工作。 但如果有多个文档文件,它仍然在工作,但会抛出“参数太多”的警告。
那么,如何测试多个文档文件的存在性呢。谢谢

在您的评论中,您将原始问题扩展为:

我想要的是,它检查文件并最终生成一个结果。如果没有文档文件,则“不存在文档文件”,或者如果存在一个或多个文件,则“存在文档文件”

很大程度上取决于你的外壳。使用Bash,您可以使用计数器确定是否找到任何匹配的文件。例如:

files=(/home/ankur/*.doc)
files_found=0

for file in "${files[@]}"; do
    [[ -f "$file" ]] && files_found+=1
done

if [[ $files_found == 0 ]]; then
    echo "no doc files exist"
else
    echo "files exist"
fi

关键是使用一个数组来存储文件名,并通过测试一次循环一个文件名。然后检查files_found变量,查看是否有任何匹配项。它对我有用™.

在您的评论中,您将原始问题扩展为:

我想要的是,它检查文件并最终生成一个结果。如果没有文档文件,则“不存在文档文件”,或者如果存在一个或多个文件,则“存在文档文件”

很大程度上取决于你的外壳。使用Bash,您可以使用计数器确定是否找到任何匹配的文件。例如:

files=(/home/ankur/*.doc)
files_found=0

for file in "${files[@]}"; do
    [[ -f "$file" ]] && files_found+=1
done

if [[ $files_found == 0 ]]; then
    echo "no doc files exist"
else
    echo "files exist"
fi

关键是使用一个数组来存储文件名,并通过测试一次循环一个文件名。然后检查files_found变量,查看是否有任何匹配项。它对我有用™.

如果您只查看天气文件是否存在,那么我想您应该避免这种麻烦:

你可以简单地做

#!/bin/bash

ls -l /home/ankur/*.doc &>/dev/null
if [[ $? -ne 0 ]]; then
    echo "no doc files exist."
else
  echo "files exist"
fi
如果

 if ls home/ankur/*.doc &>/dev/null; then
   echo "files exist"
 else
   echo "no doc files exist."
 fi

如果您不想对阵列执行任何特定操作,为什么要从睡眠中唤醒阵列:)

如果您只查看天气文件是否存在,那么我想您应该避免这种麻烦:

你可以简单地做

#!/bin/bash

ls -l /home/ankur/*.doc &>/dev/null
if [[ $? -ne 0 ]]; then
    echo "no doc files exist."
else
  echo "files exist"
fi
如果

 if ls home/ankur/*.doc &>/dev/null; then
   echo "files exist"
 else
   echo "no doc files exist."
 fi

如果您不想对阵列执行任何特定操作,为什么要将其从睡眠中唤醒:)

非常感谢。是的,我在我的ubuntu机器上使用bash。你们的代码也对我有用,但问题是,它打印的每个文件都存在或不存在。我想要的是,它检查文件并最终生成一个结果。如果没有文档文件,则“不存在文档文件”,或者如果存在一个或多个文件,则“存在文档文件”。。。thanks@user2611539:然后不要在循环内回声。相反,在循环之前将标志设置为false,如果存在任何文件,则将其设置为true。然后在循环后回音。非常感谢。是的,我在我的ubuntu机器上使用bash。你们的代码也对我有用,但问题是,它打印的每个文件都存在或不存在。我想要的是,它检查文件并最终生成一个结果。如果没有文档文件,则“不存在文档文件”,或者如果存在一个或多个文件,则“存在文档文件”。。。thanks@user2611539:然后不要在循环内回声。相反,在循环之前将标志设置为false,如果存在任何文件,则将其设置为true。然后在loop.thnx之后回显回复…第一行ls-l/home/ankur/*.doc 1>&-2>&-抛出状态为2的错误。eankuls@L9AHR43:~/ankur$echo$?2我的目录中有.doc文件。但它反映了“没有文档文件存在”,请您帮忙,因为我对这件事不太了解..Thnx将其更改为更熟悉的
&>/dev/null
。似乎是上一个更改回复的exist status.thnx…第一行ls-l/home/ankur/*.doc 1>&-2>&-抛出状态为2的错误。eankuls@L9AHR43:~/ankur$echo$?2我的目录中有.doc文件。但它反映了“没有文档文件存在”,请您帮忙,因为我对这件事不太了解..Thnx将其更改为更熟悉的
&>/dev/null
。似乎上一个正在更改存在状态。但这是仅限Bash。但这是仅限Bash。