特定のファイルが存在することを確認しようとしています(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 test
yes[
の同義語ヘルプには、次のように記載されていますtest
。test
テストの動作はパラメータの数によって異なります。
これにより、[ 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