我的目录中应该有三个文件。我需要知道他们哪些在不同的时间丢失了 我正在尝试使用“if”(放入crontab)的
的bash脚本if [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ; then
echo "All three exist" >> logfile
else
echo "<*NAME OF FILE THAT IS NOT PRESENT*> is not present" >> logfile
fi
我知道可以使用嵌套的“if”单独为所有文件获取它。但我不想为每个文件使用单独的“if”。 我也知道可以使用for循环。但我想知道上述内容是否可行 - 将脚本保持在最小尺寸。
谢谢!
答案 0 :(得分:2)
通常,无法确定&&
链中的哪个条件失败。
但是,使用for
循环并不是那么糟糕:
success=true
for f in file1 file2 file3; do
if ! [ -f $f ]; then
success=false
echo "$f is not present" >> logfile
fi
done
if $success; then
echo "All three exist" >> logfile
fi
如果该信息有价值,它还可以让您确定是否存在多个文件。
答案 1 :(得分:1)
创建一个函数来为你做测试,然后使用函数的副作用来检测布尔快捷键:
##
# Test that a file exists. Here we use standard output to just visibly see
# that the function is running, but for a more programmatic solution,
# store state: You could use a shared variable to store the names of files
# that you know exist, or you could just keep a counter of the number of times
# this function is run. Use your imagination.
file_exists() {
printf 'Testing that %s exists\n' "$1"
test -f "$1"
}
if file_exists file1 && file_exists file2 && file_exists file3; then
…
fi
答案 2 :(得分:0)
我在想这件事:
for i in {1..3}
do
...do some things...file$i
...do more things...
done
但这会增加另外一层抽象,而实际上只需要三个文件。