1

我的目录中应该有三个文件。我需要知道其中哪些在不同的时间丢失了
我正在尝试使用“if”的bash脚本(放入crontab)

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 循环。但我想知道上述是否可行 - 将脚本保持在最小大小。

谢谢!!

4

3 回答 3

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

如果该信息有价值,它还可以让您确定多个文件是否不存在。

于 2013-08-27T14:04:14.643 回答
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
于 2013-08-27T14:22:15.943 回答
0

我在想这个:

for i in {1..3} 
  do  
    ...do some things...file$i 
    ...do more things...
  done

但这会增加一个抽象层,这对于三个文件来说并不真正需要。

于 2013-08-27T14:14:39.390 回答