ファイルが複数あるかどうかを確認していない場合は、新規作成しますか?

ファイルが複数あるかどうかを確認していない場合は、新規作成しますか?

したがって、さまざまなソフトウェアで実行される計算を自動化するスクリプトを作成する必要があります。スクリプト全体が機能し、添付スクリプトの最上位スクリプトがスクリプト全体で機能します。

問題は、最初の計算で計算が機能すると、「Test.FChk」と「run.log」というファイルが印刷されることです。計算に失敗すると、「Test.FChk」ではなく「run.log」のみが印刷されます。だから何が起こっているのか、現在のスクリプトは "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

4つの可能性があります。ファイルaは存在しますが、ファイルbは存在しません。逆に、両方のファイルが存在するか、ファイルが存在しません。最初の可能性のみを制御でき、残りの3つは制御できません。しかし、あなたが言ったように、あなたが何かをしたい場合両方のファイルが存在する、従って制御しなければなりません。

 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

おすすめ記事