我运行了一个脚本来用 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):
我编写了一个 echo 来查看变量 number_part 是否包含正确的值以及是否发生变化,但它并没有改变。
我使用不同的形式进行调试,我发现如果我删除命令的部分:“echo t”,它就可以起作用。
我不知道为什么第一次可以成功但第二次却出现错误。
答案1
创建分区后,您将继续设置分区类型:echo t;
。然后,在下一个提示符下,您将输出所需的分区类型编号...但是这不是fdisk
问.它想知道您要设置其类型的分区号第一的。
因此顺序应该是:
... echo t; echo $number_part; echo $format; ...
请注意,当只有一个分区时,将省略分区号问题,因为只有一个可能的分区可以设置类型。
如果您想在脚本中创建分区,您可以考虑使用sfdisk
。它的界面更适合编写脚本。