Скрипт msinfo.sh

Этот скрипт анализирует загрузочный сектор заданного раздела и выдает различную информацию, включая "Общее Количество Специальных Секторов". Скрипт предполагает, что на данном разделе установлена файловая система FAT16. Если это не так, он выдаст сообщение об ошибке и прекратит работу. Скрипт запускается следующим образом
 
# msinfo <наименование раздела> 
 

Для запуска этого скрипта вам понадобится программа "dialog", которая может выводить диалоговые окна на экран. Вы можете найти ее здесь.

#!/bin/sh 
# 
# msinfo.sh           Этот скрипт показывает содержание загрузочного
#                     сектора заданного раздела.
#                     This shell script displays the boot sector of the 
#                     given partition.
# 
# Автор:              Rahul U. Joshi 
# Перевод:            Станислав Рогин
# 
# Изменения           Убрано использование команды expr, замененной на команду let 
# Modifications       Removed the use of expr and replaced it by the let 
#                     command. 
 
 
# проверяем параметры командной строки
# check for command line arguments 
if [ $# -ne 1 ]; then 
   echo "Использование: msinfo <наименование раздела>" 
   exit 1 
fi 
 
# проверяем, является ли входной файл блочным устройством
# check whether the input name is a block device 
if [ ! -b $1 ]; then 
   echo "msinfo: $1 не является блочным устройством"
   exit 1 
fi 
 
# создаем два временных файла
# create two temporary files for use 
TMPFILE=`mktemp -q /tmp/$0.XXXXXX` 
if [ $? -ne 0 ]; then 
    echo "msinfo: Не могу создать временный файл, прекращаю работу..." 
    exit 1 
fi 
 
TXTFILE=`mktemp -q /tmp/$0.XXXXXX` 
if [ $? -ne 0 ]; then 
   echo "msinfo: Не могу создать временный файл, прекращаю работу..." 
   rm -f $TMPFILE 
   exit 1 
fi 
 
backtitle="`printf "%78s" "msinfo, Информация о файловой системе FAT16 -- Rahul Joshi"`" 
 
dialog --title "Загрузочный сектор $1" --backtitle "$back_title" --infobox "\nАнализирую загрузочный сектор $1\nПодождите..."  14 60 
 
# создаем пустой текстовый файл TXTFILE
# truncate TXTFILE to zero length 
echo > $TXTFILE 
 
# Получаем версию форматировавшей DOS
# get Formatting DOS version 
dd 2>/dev/null if=$1  bs=1 count=8 skip=3 | dd 2>/dev/null of=$TMPFILE 
printf >>$TXTFILE "%30s : %s\n" "Версия форматировавшей DOS" "`cat $TMPFILE`" 
 
 
# Получаем файловую систему
# get file system 
dd 2>/dev/null if=$1  bs=1 count=8 skip=54 | dd 2>/dev/null of=$TMPFILE 
printf >>$TXTFILE "%30s : %s\n" "Файловая система" "`cat $TMPFILE`" 
 
# проверяем, является ли файловая система FAT16 
# check if filesystem in a FAT16 
if [ "`cat $TMPFILE`" != "FAT16   " ]; then 
  dialog --title "Загрузочный сектор $1" --backtitle "$back_title" --infobox  "\nФайловая система $1 не является FAT16"  14 60 
  exit 2 
fi 
 
# Получаем метку тома из загрузочного сектора
# get volume label in boot sector 
dd 2>/dev/null if=$1  bs=1 count=11 skip=43 | dd 2>/dev/null of=$TMPFILE 
printf >>$TXTFILE "%30s : %s\n" "Метка тома в загрузочном секторе" "`cat $TMPFILE`" 
  
 
# Получаем размер сектора
# get Sector size 
dd 2>/dev/null if=$1  bs=1 count=2 skip=11| od -An -tdS | dd 2>/dev/null of=$TMPFILE 
printf >>$TXTFILE "%30s : %d\n" "Размер сектора" `cat $TMPFILE` 
sector_size=`cat $TMPFILE` 
 
 
# Получаем количество резервных секторов
# get Reserved sectors 
dd 2>/dev/null if=$1  bs=1 count=2 skip=14| od -An -tdS | dd 2>/dev/null of=$TMPFILE 
printf >>$TXTFILE "%30s : %d\n" " Резервные сектора" `cat $TMPFILE` 
reserved_sectors=`cat $TMPFILE` 
 
 
# Получаем количество секторов FAT
# get FAT sectors 
dd 2>/dev/null if=$1  bs=1 count=1 skip=16| od -An -tdS | dd 2>/dev/null of=$TMPFILE 
fat_count=`cat $TMPFILE` 
 
dd 2/dev/null if=$1  bs=1 count=2 skip=22| od -An -tdS | dd 2>/dev/null of=$TMPFILE 
sectors_per_fat=`cat $TMPFILE` 
 
# расчитываем количество секторов, занимаемых FAT
# calculate the no of sectors allocated for FAT's 
let fat_sectors=fat_count*sectors_per_fat 
 
printf >>$TXTFILE "%30s : %u (%u x %u) \n" "Секторов FAT" "$fat_sectors" "$fat_count" "$sectors_per_fat" 
 
 
# Получаем количество секторов в корневом каталоге
# get root directory sectors 
dd 2>/dev/null if=$1  bs=1 count=2 skip=17| od -An -tdS | dd 2>/dev/null of=$TMPFILE 
root_sectors=`cat $TMPFILE` 
 
# расчитываем количество секторов, занимаемых корневым каталогом
# calculate the no of sectors allocated for root directory 
let root_sectors=root_sectors*32/sector_size 
 
printf >$TXTFILE "%30s : %u\n" "Секторов корневого каталога" "$root_sectors" 
 
 
# получаем Общее Количество Специальных Секторов
# get Total special sectors 
let total=reserved_sectors+fat_sectors+root_sectors 
printf >>$TXTFILE "%30s : %u\n" "Всего специальных секторов" "$total" 
 
 
# вывод информации
dialog --title "Загрузочный сектор $1"  --backtitle "$back_title"  --msgbox "`cat $TXTFILE`" 14 60 
  
# удаление временных файлов
# delete temporary files
rm -f $TMPFILE 
rm -f $TXTFILE 
 
# end of msinfo.sh