专注各种脚本编程
Baidu
加入收藏夹
本站内容有下面分类知识,欢迎您的到来^_^
shell相关:指令篇 基础篇 脚本欣赏 编程实例 shell问问 shell视频教程 技巧篇 水平测试 E文资料 vi编辑器 高级Bash脚本编程指南
其他:mysql perl c语言 oracle
当前位置:| 主页>shell脚本欣赏>

一个实现自动分区的shell脚本

百度收藏 QQ搜藏

感谢作者:home_king兄

part_it代码:
#!/bin/sh
# Create partitions(logical for slave hard disk automatically.
# WARNNING!!!
# Your hard disk must be empty initially,
# OTHERWISE this script does not process!
#
# Written by home_king <home_king@163.com>
#
                                                                               
# Check parted
if [ "$(whereis parted | awk '{print $2}')" = "" ]; then
        echo "Parted is not installed!"
        exit 1
fi
# Create partition
if [ -n "$1" ]; then
        bdev=$1
        if [ -n "$(parted -s $bdev print |grep ^1)" ]; then
                echo 'Your hard disk must be not partitioned yet!!!'
                exit 1
        fi
        tmpvar=$(parted -s $1 print |grep "Disk geometry" |awk '{print $5}')
        edge=${tmpvar##*-}
        iedge=${edge%%.*}
        # Create refer to config_file
        if [ -n "$2" ] && [ -f $2 ]; then
                config_file=$2
                rm -f tmpfile
                cat $config_file |grep ^[1-9] > tmpfile
                startM=0
                lastflag=0
                while read size parttype fs; do
                        if [ $((size-0)) -eq 0 ] || [ $size -le 0 ]; then
                                echo 'Invalid "size" format!!!'
                                exit 1
                        fi
                        case $parttype in
                                l) parttype="logical";;
                                p) parttype="primary";;
                                *) echo 'Invalid part type!!![logical|primary]'
                                   exit 1;;
                        esac
                        case $fs in
                                ext2) fs="ext2";;
                                *) echo 'Invalid filesystem!!![Now just support ext2]'
                                   exit 1;;
                        esac
                        endM=$(($size+$startM))
                        if [ $endM -gt $iedge ]; then
                                lastflag=1
                                endM=$edge
                        fi
                        parted -s $bdev mkpartfs $parttype $fs $startM $endM
                        [ $lastflag -eq 1 ] && exit 0
                        startM=$endM
                done < tmpfile
        # Auto mode
        else
                flag=""
                until [ "$flag" = "y" ] || [ "$flag" = "n" ]; do
                        read -p 'WRNNING!!!NO CONFIG!!!Auto mode?[y/n]' flag
                done
                [ "$flag" = "n" ] && echo "exit" && exit 1
                avrsize=$(($iedge/4))
                startM=0
                i=1
                until [ $i -gt 3 ]; do
                        endM=$(($avrsize*$i))
                        parted -s /dev/hda mkpartfs logical ext2 $startM $endM
                        startM=$endM
                        i=$((i+1))
                done
                parted -s /dev/hda mkpartfs logical ext2 $startM $edge
                echo "All done!!!"
                echo
                parted -s /dev/hda print
        fi
else
        echo "You must input device to process!"
        exit 1
fi 

这个shell脚本用法是
chmod +x part_it
./part_it /dev/hdX config-file
其中/dev/hdX是你的从盘,如X是b;
config-file是分区配置文件,格式如下

#size parttype fs
6000 l ext2
2000 l ext2
8000 l ext2

第一列是分区大小,第二列是分区类型(logical,缩写l,代表逻辑分区),第三列是文件系统,.三列用TAB键分开!!!
由于不知道你的具体要求是什么,只好仅仅支持逻辑分区以及ext2,兄弟最好在这个基础上自己修改一下脚本.
另外,脚本会自动判别你是否已分区,配置文件中总的size是否超出硬盘容量等等.
仅提供参考,后果自负!!!

上一篇:找出文件中某个KEY的shell脚本(版本2) 下一篇:一个删除无效链接的shell脚本

power by soyo123 2007-2008