Я запустил сценарий для форматирования диска с помощью fdisk следующим образом:
(echo n; echo p; echo $number_part; echo $firs_sector; echo $second_sector; echo t; echo $format; echo p; echo w) | fdisk /dev/$disk
когда я выполняю первый раз, формат выглядел так:
Device Boot Start End Blocks Id System /dev/sdb1
2048 2099199 1048576 83 Linux
но в следующем выполнения скрипт завершился ошибкой:
command (m for help): Command action
e extended
p primary partition (1-4)
Partition number (1-4, default 2): Using default value 2
First sector (2099200-20971519, default 2099200): Using default value 2099200
Last sector, +sectors or +size{K,M,G} (2099200-20971519, default 20971519):
Command (m for help): Partition number (1-4): Value out of range.
Partition number (1-4): Partition number (1-4): Partition number (1-4):
Я написал эхо, чтобы увидеть, содержит ли переменная number_part правильное значение, и если изменяется, но не меняется.
Я отлаживал разные формы и видел, что если я удалю часть команды: "echo t", она работает.
Я не знаю, почему в первый раз она работает, но во второй раз появляется ошибка.
После создания раздела вы переходите к настройке типа раздела: echo t;
. Затем в следующем приглашении вы выводите номер желаемого типа раздела ... но это не то, что fdisk
запрашивает . Он хочет знать номер раздела, тип которого вы хотите сначала установить .
Таким образом, последовательность должна быть:
... echo t; echo $number_part; echo $format; ...
Обратите внимание, что когда есть только один раздел, вопрос о номере раздела будет опущено, потому что существует только один возможный раздел для установки типа.
Если вы хотите создать разделы в сценарии, вы можете рассмотреть возможность использования sfdisk
взамен. Его интерфейс больше подходит для написания сценариев.