本文目的为介绍Linux下硬盘分区的编程技巧,重点分析控制流结构的使用和命令在shell脚本编程里的组合使用:

1、要做硬盘分区,首先需呀先了解系统究竟有多少块硬盘可用,具体方法如下:

用 fdisk -l 查看系统硬盘的个数和分区情况,然后找出硬盘设备列举出来

wKiom1OWnhXSkhOvAANeY04TkaA440.jpg

上面列出了硬盘设备和每个硬盘的分区情况,然后要做的就是从中找出Linux的硬盘设备,有下列方法

fdisk -l 2> /dev/null | grep -o "Disk /dev/[sh]d[a-z]" 或者 fdisk -l 2> /dev/null | grep "Disk /dev/[sh]d[a-z]" | awk '{print $1}'即可列出如下磁盘设备

wKiom1OWoA6hQ3ESAACH3jHyqQ0447.jpg

做到这里大多数人都能够完成一半了


2、要知道如何分区,这也是用shell控制硬盘分区的重要工作,下面大家来看下这段代码:

#!/bin/bash
#
echo 'n
p
1

+120M

n
p
2

+512M

n
p
3

+128M

t
3
82
w' | fdisk /dev/sdb

这段代码的功能很简单,就是用规定好的数据通过管道传递给fdisk命令让其逐行读取执行,实现用规定数据对硬盘分区,到了这里相信很多人都能知道怎么在shell脚本里控制分区了。

3、但是到这里还不行,进行分区之前还的对磁盘进行格式化,删除磁盘上面的所有分区,命令很简单,用dd 就可以完成,命令如下

dd if=/dev/zero of=/dev/sdb bs=512 count=1

命令实现方法为把分区列表清除完成删除分区的功能

4、到这里就可以组织语言进行编写了下面给出我写的范例

#!/bin/bash
#
echo  "Initial a disk..."
echo -e "\033[31mWarning: Then operation may damage the disk data.\033[0m"
read -p "Are you sure?(y/n)" SURE
if [ $SURE == 'n' ];then
    echo "quit"
    exit 7
fi
fdisk -l 2> /dev/null | grep -o "Disk /dev/[sh]d[a-z]"
read -p "Your choice:" PARTDISK
if [ $PARTDISK == 'quit' ];then
    echo "quit"
    exit 6
fi

until fdisk -l 2> /dev/null | grep -o "Disk /dev/[sh]d[a-z]" | grep "Disk $PARTDISK" &> /dev/null;do
    read -p "Wrong option,You choice again:" PARTDISK
done

read -p "Will destroy all data,continue?(y/n)" CHOICE

until [ $CHOICE == 'y' -o $CHOICE == 'n' ];do
    read -p "Wrong choice,again your choice.(y/n)" CHOICE
done

if [ $CHOICE == 'n' ];then
    echo "quit"
    exit 9
else
    echo "Start partition your disk...."
    for I in `mount | grep "${PARTDISK}[1-9]"`;do
        fuser -km $I
        umount $I
        echo "$I umount finish.."
    done
    dd if=/dev/zero of=$PARTDISK bs=512 count=1 &> /dev/null
    sync
    sleep 3
echo 'n
p
1

+120M

n
p
2

+512M

n
p
3

+128M

t
3
82
w' | fdisk $PARTDISK &> /dev/null
partprobe $PARTDISK
sync
sleep 3
mke2fs -j ${PARTDISK}1 &> /dev/null
echo "partition ${PARTDISK}1 ok"
mke2fs -j ${PARTDISK}2 &> /dev/null
echo "partition ${PARTDISK}2 ok"
mkswap ${PARTDISK}3 &> /dev/null
echo "partition ${PARTDISK}3 ok"
fi

上面代码给出了磁盘分区的具体数值,可以灵活运用。还要注意一点,在对磁盘进行分区格式化之前,一定要确定没有用户正在访问该磁盘(即做dd之前要先卸载挂载的磁盘),上面脚本已给出了,有兴趣的可以具体分析下怎么实现的。

最后,仅以此文献给Linux的爱好者,希望能给你们学习shell编程带来帮助。