检查是否存在多个文件,如果没有创建一个文件?

检查是否存在多个文件,如果没有创建一个文件?

因此,我需要编写一个脚本来自动执行由几个不同软件完成的计算。整体脚本有效,在所附脚本中,顶部脚本在我的整体脚本中有效。

问题是,在第一次计算中,如果计算有效,它会打印出一个名为“Test.FChk”和“run.log”的文件。如果计算失败,则仅打印“run.log”,而不打印“Test.FChk”。所以目前发生的情况是我当前的脚本测试“Test.FChk”,但如果计算失败,它会处于无限循环中,所以我希望脚本测试是否找到 run.log 文件,而不是找到Test.FChk,脚本结束,但如果找到两者,它将继续执行脚本的下一部分,并且在计算进行时,等待创建文件,它会打印出其“正在检查作业状态”

###script that works###
while [ ! -f "Test.FChk" ]
do
    echo "Checking job status of Gaussian: $JOBNAME..."
    sleep 5
done

###script that doesnt work###
while true; do
    if [[ ! -f "Test.FChk" && -f "run.log" ]]; then
        echo "Checking job status..."
        sleep 5
        printf "Calculation failed, script ended"
        return
    fi
    break
done

答案1

有四种可能:文件 a 存在,但文件 b 不存在,反之,两个文件都存在,或者都不存在。你只控制了第一种可能性,却控制不了其他三种。但正如你所说,你想做某事,如果两个文件都存在,所以你必须控制它。

 while true; do
    if [[ ! -f "Test.FChk" && -f "run.log" ]]; then
        echo "Checking job status..."
        sleep 5
        printf "Calculation failed, script ended"
        return
    # here you control if both files exist
    elif [[ -f "Test.FChk" && -f "run.log" ]]; then 
        break # break the loop, the next code will continue
    fi 
    ### this will just stop the loop at the first iteration!
    break ### not something you need
    ###
done

答案2

该解决方案将持续运行,直到至少存在为止,如果缺少run.log则退出脚本。Test.FChk如果两个文件都存在,则脚本将继续。

#!/bin/bash

while true; do
    if [ -f "run.log" ]; then
        if [ -f "Test.FChk" ]; then
            # calculation finished, break loop
            break
        fi
        echo "Calculation failed, exiting." >&2
        exit 1
    fi
    echo "Checking job status..."
    sleep 5
done

echo "Calculation successfully finished!"
# do something

相关内容