本文目的为介绍Linux下硬盘分区的编程技巧,重点分析控制流结构的使用和命令在shell脚本编程里的组合使用:
1、要做硬盘分区,首先需呀先了解系统究竟有多少块硬盘可用,具体方法如下:
用 fdisk -l 查看系统硬盘的个数和分区情况,然后找出硬盘设备列举出来
![]() |
上面列出了硬盘设备和每个硬盘的分区情况,然后要做的就是从中找出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}'即可列出如下磁盘设备
做到这里大多数人都能够完成一半了
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编程带来帮助。
转载于:https://blog.51cto.com/silencewolf/1424536