gpt4 book ai didi

bash - 检查是否存在多个文件——使用参数的 Unix 脚本

转载 作者:行者123 更新时间:2023-11-29 09:26:23 24 4
gpt4 key购买 nike

我正在尝试编写一个 UNIX shell 脚本,它将一些文件名作为参数,然后在当前目录中搜索这些文件。

所以我会输入

$ 脚本文件 1 文件 2 文件 3...

如果文件名存在,它将以 1 退出;但是,如果文件不存在,它将以状态 0 结束。

这是我目前所拥有的:

#!/bin/bash
FILE=$1

if [ -f $FILE ];
then
echo "File $FILE exists."
else
echo "File $FILE does not exist."
fi

但它一次只针对一个文件作为参数传递。我一次需要多个文件作为参数。

最佳答案

问题不完整——你想要退出状态 1:

  • 如果每个文件都存在,
  • 如果每个文件都丢失了,
  • 如果存在至少一个文件,
  • 如果至少有一个文件丢失,
  • 或者您有其他的 N of M 标准吗?

迭代文件名参数的基本技术是:

for file in "$@"
do
...body of loop...using "$file" when referring to the file
done

另见 How to iterate over the arguments in a bash script .


如果您希望在每个文件都存在时退出状态 1,则可以在检测到文件丢失时以状态 0 退出:

for file in "$@"
do
if [ ! -e "$file" ]
then echo "$file is missing" >&2; exit 0
fi
done
exit 1

如果您希望在每个文件都丢失时退出状态 1,则可以在检测到文件存在时以状态 0 退出:

for file in "$@"
do
if [ -e "$file" ]
then echo "$file is present" >&2; exit 0
fi
done
exit 1

如果您希望在至少存在一个文件时退出状态 1,则可以在检测到文件存在时以状态 1 退出:

for file in "$@"
do
if [ -e "$file" ]
then echo "$file is present" >&2; exit 1
fi
done
exit 0

如果您希望在至少一个文件丢失时退出状态 1,则可以在检测到文件丢失时以状态 1 退出:

for file in "$@"
do
if [ ! -e "$file" ]
then echo "$file is missing" >&2; exit 1
fi
done
exit 0

如果您有其他一些标准,则需要解释它是什么,以及如何将其应用于案例 0、1、2 ... M 文件在命令行上指定。

如果您想查看每个文件的报告,您需要使用稍微不同的结构。对于最后一种情况,如果至少有一个文件丢失,您希望退出状态 1,您可以在循环之前将变量 status 设置为 0,并在循环体中将其设置为1 如果满足条件,最后以当前status值退出。

status=0
for file in "$@"
do
if [ ! -e "$file" ]
then echo "$file is missing" >&2; status=1
fi
done
exit $status

其他情况的变化类似;将初始状态设置为默认值,并在检测到相反情况时覆盖默认值。

我用-e来测试名字是否存在;如果名称必须是普通文件、目录、 block 或字符特殊设备、符号链接(symbolic link)、FIFO 或套接字或……,您可以使用其他更具体的测试

我使用了 >&2 符号,以便将报告发送到标准错误而不是标准输出。您可能更喜欢在消息前加上脚本名称 $0。您可能更喜欢在标准输出上报告消息。

关于bash - 检查是否存在多个文件——使用参数的 Unix 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20040596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com