Вы можете использовать второе условие, которое использует некоторую переменную (или файл) в качестве флага (или счетчика).
Например, чтобы использовать файл как флаг, вы можете изменить свой сценарий таким образом:
#!/bin/bash
FLAG_FILE="/tmp/flag_file_my_error_email_script"
if grep -iq 'error' "/path/to/log" && [ ! -f "${FLAG_FILE}" ]; then
echo "error found" | mailx -s "error alert" email-id
touch "$FLAG_FILE"
fi
Команда touch "$FLAG_FILE" создаст файл /tmp/flag_file_my_error_email_script, который используется как аргумент во втором условии [ ! -f "${FLAG_FILE}" ]. Читайте о условных выражениях Bash.
Если вы хотите отправить / получить определенное количество писем, а затем подавить функцию скрипта, вы можете добавить третье условие, в котором будет использоваться содержимое $FLAG_FILE как Читайте о условных выражениях Bash :
#!/bin/bash
FLAG_FILE="/tmp/flag_file_my_error_email_script"
if grep -iq 'error' "/path/to/log" && [ ! -f "${FLAG_FILE}" ] || (( $(cat "$FLAG_FILE") < 2 )); then
echo "error found" | mailx -s "error alert" email-id
touch "$FLAG_FILE"
NEW_VALUE=$(( $(cat "$FLAG_FILE") + 1)) && echo "$NEW_VALUE" > "$FLAG_FILE"
fi
Обратите внимание, что && имеет смысл, если предыдущее условие возвращает true, а || означает, что предыдущее условие возвращает false .
Если вы хотите восстановить «нормальную» работу скрипта, вы должны удалить $FLAG_FILE. Этот файл будет автоматически удален при перезагрузке системы. Если вы хотите изменить это поведение, выберите каталог, отличный от /temp, где пользователь, выполняющий сценарий, имеет права на запись.
Я думаю, что этот ответ (и связанный с ним ответ, то есть этот) должен решить вашу проблему, установив на своем веб-сайте последний проприетарный драйвер Ati. Существует пошаговое руководство о том, как это сделать.