Bash:IF-THENステートメントに「引数が多すぎます」

Bash:IF-THENステートメントに「引数が多すぎます」

特定のファイルが存在することを確認しようとしています(24時間未満の場合のみ)。もしそうなら、名前が ".control"で終わるファイルが存在するかどうか、2番目の解決を行います。両方の条件が満たされると、電子メールとログエントリが生成されます。最初のファイルは存在しますが、.controlは存在しない場合は別のログエントリが生成されます。 24時間以内にファイルが存在しない場合、スクリプトの残りの部分は引き続き実行されます。

これは、Solaris および Linux で Bash を使用して cron で実行されるシェルスクリプトにあります。

if [ find "$MAINTENANCE_LOCK/testLOCK" -mtime -1 ]; then
    if [ -f "$PATH_TO_TRIGGER_FILES/*.control" ]; then
        test_log_msg "test_SYSTEM" $NOTICE "Valid Maintenance Lock file found, test actions blocked." "status"
        test_log_email " " " " " " "test Actions were blocked because an testLOCK file less than 24hrs old is in place." " "
    else
        test_log_msg "test_SYSTEM" $NOTICE "Valid Maintenance Lock file in place." "status"
        exit
    fi
fi

ただし、「set -x Trap read debug」を使用してコード行を段階的に実行すると、次のエラーが発生します。

+ '[' find /var/opt/test/maintenancelock/testLOCK -mtime -1 ']'
/opt/test/test_control.sh: line 72: [: too many arguments

ここで私が望むことをする方法はありますか?

ベストアンサー1

試してみてくださいhelp [- help testyes[の同義語ヘルプには、次のように記載されていますtesttest

テストの動作はパラメータの数によって異なります。

これにより、[ find "$MAINTENANCE_LOCK/testLOCK" -mtime -1 ];
4つの単語をに渡し[、4つの引数で何をすべきかわかりません。


特定のファイルが存在することを確認しようとしています(24時間未満の場合のみ)。もしそうなら、名前が ".control"で終わるファイルが存在するかどうか、2番目の解決を行います。

バッシュ使用:

mapfile -t testlock < <(find "$MAINTENANCE_LOCK/testLOCK" -mtime -1)
if [[ ${#testlock[@]} -eq 0 ]]; then
    echo "lock file does no exist or is too old"
else
    control=( "$PATH_TO_TRIGGER_FILES/"*.control )
    if [[ ${#control[@]} -gt 0 ]]; then
        echo "lock file exists and at least one control file exists"
    else
        echo "lock file exists but no control files exist"
    fi
fi

おすすめ記事