Я пытаюсь написать bash-скрипт, который проверяет, с каким sda / sdb / sdc связан мой жесткий диск, и монтирует мой жесткий диск в зависимости от того, какой он есть.
if (( `sudo fdisk -l | grep /dev/sdc | grep "1.8 TiB"` ))
then
echo sdc1 with 2TiB found.
sudo mount /dev/sdc1 /mnt/2tbOrange/
fi
Я получаю следующую ошибку «деление на 0» и не могу понять, почему.
((: Disk /dev/sdc: 1.8 TiB, 2000365289472 bytes, 3906963456 sectors : division by 0 (error token is "dev/sdc: 1.8 TiB, 2000365289472 bytes, 3906963456 sectors ")
Причина, по которой вы получаете эту ошибку, заключается в том, что двойные скобки ((...))
предназначены для арифметики, поэтому косая черта указывает на деление. Для получения более подробной информации см. В чем разница между операторами Bash [[vs [vs (vs ((? ) в Unix & amp; Linux.
Как обсуждалось в комментариях, вы можете использовать grep -q
. Возвращает true, если совпадение найдено, и false в противном случае.
if sudo fdisk -l | grep /dev/sdc | grep -q "1.8 TiB"; then ...
Тем не менее, это проблема XY . Код, который вы написали, не делает то, что вы описать. Из быстрого поиска, кажется, лучшее решение - использовать mount -L
или mount -U
для монтирования по метке файловой системы или UUID, соответственно. Вам не нужно анализировать выходные данные fdisk -l
, и вы не Мне не нужно заявление if. Если вам нужно больше деталей, дайте мне знать, возможно, вам придется задать новый вопрос.