Состояние диска BASH: ожидается целочисленное выражение

Это часть моего сценария bash:

    # Checking disk
    for disk in $disks
    do
      # Creating a array with results
      declare -a status=(`smartctl -a -d ata $disk | awk '/Reallocated_Sector_Ct/ || /Seek_Error_Rate/ { print $2" "$NF }'`)
      # Checking that we do not have any Reallocated Sectors
      if [ "${status[1]}" -ne 0 ]
        then
        echo "$mname Warning: Disk $disk has errors! ${status[0]} ${status[1]} ${status[2]} ${status[3]}. Following complete smartctl output." >> diskerror.log
        smartctl -a -d ata $disk >> $logloc/diskerror.log
        failed=("${failed[@]}" "$disk")
        sendm="1"
      fi
done

Когда я запускаю скрипт, bash возвращает следующую ошибку: disk_status.sh: строка 38: [: : ожидается целочисленное выражение

Строка ошибки: if [ "${status[1]}" -ne 0 ]

Кто-то может помочь с этой ошибкой?


person Octávio Filipe Gonçalves    schedule 06.10.2014    source источник
comment
Имейте в виду, что Seek_Error_Rate и Reallocated_Sector_Ct — не единственные параметры SMART, которые следует проверять при оценке состояния жесткого диска.   -  person Daniel Kamil Kozar    schedule 06.10.2014
comment
Чтобы ответить на ваш вопрос, нам нужно знать, как выглядит $status (или хотя бы ${status[1]}). Используйте set -x для включения режима отладки, и вы сможете узнать, что вызвало вашу проблему.   -  person Tom Fenech    schedule 06.10.2014
comment
Скорее всего, ${#status[@]} равно 0 или 1, поэтому ${status[1]} просто не существует.   -  person chepner    schedule 06.10.2014


Ответы (1)


Используйте сравнение строк вместо числового:

if [ "${status[1]}" != "0" ]

И проверьте свое значение статуса (вы не получаете числовое значение во всех случаях)

person Juan Diego Godoy Robles    schedule 06.10.2014
comment
Если данных нет, он сообщает -, а не число, из-за которого, вероятно, и возникает проблема. - person Petesh; 06.10.2014