#!/bin/bash
echo -e "\\033[1;34m start make sd \\033[0m"
#获取sd卡信息
sd_main=`ls -l /dev/disk/by-id/ | grep usb- | awk -F '/' 'NR==1{print $3}'`
sd_1=`ls -l /dev/disk/by-id/ | grep usb- | awk -F '/' 'NR==2{print $3}'`
sd_2=`ls -l /dev/disk/by-id/ | grep usb- | awk -F '/' 'NR==3{print $3}'`
if [ -d "/dev/$sd_main" ]; then
echo"please insert the sd card!"
exit
fi
#分区前先取消挂载
disk="/dev/$sd_1"
mount | grep $disk
if [ $? = '0' ]; then
echo umount "$disk"
umount $disk
fi
disk="/dev/$sd_2"
mount | grep $disk
if [ $? = '0' ]; then
echo umount "$disk"
umount $disk
fi
#获取磁盘信息
disk="/dev$sd_main"
#磁盘分区,默认两个分区
echo -e "\\033[1;34m fdisk $disk now ... \\033[0m "
#删除分区信息
dd if=/dev/zero of=$disk bs=1 count=64 seek=446 >/dev/null
#重新分区,第一个区分配2G 第二个分区为剩余大小(如下的分区参数不能随意更改)
fdisk $disk >/dev/null <<EOF
n
p
1
4196352
n
p
2
w
EOF
#分区格式化
echo -e "\\033[1;34m format $disk ... \\033[0m "
#获取分区1的信息
sd_1=`ls -l /dev/disk/by-id/ | grep usb- | awk -F '/' 'NR==2{print $3}'`
#把分区1格式化成ext4格式
mkfs.ext3 -L rootfs /dev/$sd_1
if [ $? = '0' ]; then
echo -e "\\033[1;34m mkfs.ext3 /dev/$sd_1 success! \\033[0m"
else
echo -e "\\033[1;34m mkfs.ext3 /dev/$sd_1 error! \\033[0m"
fi
#获取分区2的信息
sd_2=`ls -l /dev/disk/by-id/ | grep usb- | awk -F '/' 'NR==3{print $3}'`
#把分区2格式化成ext4格式
mkfs.ext3 -L logfs /dev/$sd_2
if [ $? = '0' ]; then
echo -e "\\033[1;34m mkfs.ext3 /dev/$sd_2 success! \\033[0m"
else
echo -e "\\033[1;34m mkfs.ext3 /dev/$sd_2 error! \\033[0m"
fi
这段脚本主要是查找usb下的储存设备,然后获取设备号进行分区格式化
echo -e "\\033[1;34m start make host sd \\033[0m"
这主要是以黑底蓝字显示(1表示黑色底,34m表示蓝字字)
sd_main=`ls -l /dev/disk/by-id/ | grep usb- | awk -F '/' 'NR==1{print $3}'`
| 是shell中的管道,将前面的命令结果作为后面一个命令的输入
grep linux 文本搜索工具 此处是搜素以usb-开头的文本
awk 文本分析工具 -F指定输入文件文本拆分符
awk -F '/' 'NR==1{print $3}'表示以、为分隔符,输出分隔符的第三个参数
dd if=/dev/zero of=$disk bs=1 count=64 seek=446 >/dev/null
/dev/null,它是空设备.看作"黑洞",它非常等价于一个只写文件,所有写入它的内容都会永远丢失
/dev/zero也是一个伪文件,但它实际上产生连续不断的null的流(二进制的零流,而不是 ASCII型的)。写入它的输出会丢失不见
#重新分区,第一个区分配2G 第二个分区为剩余大小(如下的分区参数不能随意更改)
fdisk $disk >/dev/null <<EOF
n
p
1
4196352
n
p
2
w
EOF
使用<<EOF,告诉主shell,后续的输入,是其他命令或者子shell的输入,直到遇到EOF为止,再回到主shell。
这里是使用fdisk进行分区
分区大小的计算;我第一个分区是2G,在在上面输入的参数是4196352 这个是怎么计算出来的呢
先看看磁盘信息 fdisk -l
sdb是U盘信息
终止柱面号 = 起始柱面号 + [(需要分区的大小 * 1024 * 1024 ) / units]
4196352=2048+[(2048*1024*1024)/512]
mkfs.ext3 -L logfs /dev/$sd_2
分区完成后,最后再将分区后的盘格式化成ext3 格式,当然也可以格式化ext4、fat等格式