Вы можете использовать parted -l
для определения типа таблицы разделов. Например:
$ sudo parted -l
Model: ATA TOSHIBA THNSNS25 (scsi)
Disk /dev/sda: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 4194kB 32.2GB 32.2GB primary ext4 boot
2 32.2GB 256GB 224GB primary ext4
Model: ATA Hitachi HDT72101 (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 32.2GB 32.2GB primary ext4 boot
2 32.2GB 996GB 964GB primary ext4
3 996GB 1000GB 4295MB primary linux-swap(v1)
Поле Partition Table
показывает, что я использую msdos
MBR таблицу разделов (та, которая все еще обычно используется для Linux и Windows) на обоих дисках. Из страницы man
parted
может создавать (и, таким образом, надеюсь, идентифицировать) следующие типы таблиц разделов (или, более широко, "метки дисков"):
bsd
dvh
gpt - this is a GPT partition table
loop - this is raw disk access without a partition table
mac
msdos - this is a standard MBR partition table
pc98
sun
Стоит добавить команду для перечисления одного раздела, поскольку это не очевидно без знания parted
, и поиск нужных данных при наличии нескольких дисков может стать проблемой. Для /dev/sda
вы сделаете:
parted /dev/sda print
Вам не нужноshift
(и не следует )внутри цикла, потому что getopts
отслеживает, какой позиционный параметр он обрабатывает, обновляя переменную OPTIND
.
Вам не нужно от до shift
после цикла :вы можете использовать OPTIND
, чтобы определить, какие позиционные параметры обрабатывать самостоятельно. Однако использование shift
— это самый простой способ работы с аргументами, которые были обработаны getopts
, при условии, что вам не нужно публиковать -их обработку самостоятельно.
Наличиеgetopts
вместо сдвига само по себе имеет несколько преимуществ :вы можете самостоятельно пересмотреть аргументы, если это необходимо, и вы можете воспроизвести исходную командную строку. Последнее полезно, например, в сообщениях об ошибках или если вам нужно запустить другую команду с теми же аргументами (. Я знаю, что использовал это в прошлом ).