Вопрос или проблема
Пытаюсь написать скрипт в Unraid, используя значения SMART жёсткого диска. Как мне разобрать RAW_VALUE датчика? В моём случае это 45.
Я могу получить все конкретные данные сенсора, используя:
smartctl -A /dev/sdg | grep Airflow_Temperature_Cel
Вывод:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
190 Airflow_Temperature_Cel 0x0032 055 051 000 Old_age Always - 45
Я просто пытаюсь получить значение RAW_VALUE равное 45, чтобы записать его в переменную. Буду благодарен за помощь.
Конечно, я понял это сразу после того, как опубликовал. На случай, если кто-то интересуется, вот что я сделал.
smartctl -A /dev/sdg | grep Airflow_Temperature_Cel | grep -o '...$'
Ответ или решение
Для извлечения значения RAW_VALUE из вывода команды smartctl
в Linux вы можете использовать комбинацию команд и регулярных выражений. В вашем случае, поскольку вы пытаетесь получить значение температуры воздуха, расположенное в конце строки, подойдёт следующий способ.
Предполагая, что файл устройства – это /dev/sdg
, вот общая команда:
RAW_VALUE=$(smartctl -A /dev/sdg | grep Airflow_Temperature_Cel | awk '{print $NF}')
Объяснение команды:
smartctl -A /dev/sdg
: Эта команда выводит все атрибуты SMART для указанного устройства.grep Airflow_Temperature_Cel
: Мы ищем строку, которая содержит информацию о температуре воздуха.awk '{print $NF}'
:awk
берет последнюю колонку строки, которая соответствуетRAW_VALUE
.
Пример использования:
Если вы хотите вывести значение RAW_VALUE и использовать его в скрипте, вы можете добавить следующую строку кода:
#!/bin/bash
# Получаем значение RAW_VALUE для Airflow Temperature
RAW_VALUE=$(smartctl -A /dev/sdg | grep Airflow_Temperature_Cel | awk '{print $NF}')
# Выводим результат
echo "Значение RAW_VALUE температуры воздуха: $RAW_VALUE"
Альтернативный способ:
Если вы хотите использовать ваш первоначальный подход с использованием grep
и вырезать последние три символа строки, вы можете сделать следующее:
RAW_VALUE=$(smartctl -A /dev/sdg | grep Airflow_Temperature_Cel | grep -o '[0-9]*$')
Здесь grep -o '[0-9]*$'
находит последние цифровые символы в строке.
Заключение
Теперь вы имеете два способа извлечения значения RAW_VALUE для "Airflow_Temperature_Cel" из вывода smartctl
. Вы можете использовать тот, который наилучшим образом соответствует вашим требованиям. Этот метод легко интегрировать в сценарии и позволяет эффективно автоматизировать мониторинг состояния HDD в Unraid
.