sh6.脚本磁盘分区格式化

练习1.

写一个脚本,通过ping 命令测试192.168.0.100到192.168.0.254之间的所有主机是否在线,

如果在线,就显示“ip is up.”IP为真实IP地址,且以绿色显示;

如果不在线,就显示“IP is down." ,以红色显示 

要求:分别使用while, until 和for循环实现。

1.for循环
#/bin/bash
#
for i in {1..100};do
    if ping 192.168.3.$i -c1 -w1 > /dev/null;then
        echo -e "\033[32m192.168.3.$i IP is up\033[0m"
    else
        echo -e "\033[31m192.168.3.$i IP is down!\033[0m"
    fi
done

2.while 循环
#/bin/bash
#
i=0
while [ $i -le 100 ];do
    if ping -c1 -w1 192.168.3.$i &> /dev/null;then
        echo -e "\033[32m192.168.3.$i IP is up.\033[0m"
    else
        echo -e "\033[31m192.168.3.$i IP is down.\033[0m"
    fi
    ((i++))
done

注:ping -c1 一次
         -w1 延迟一秒

 颜色:
echo -e "\033[35mHello\033[0m,world."

 

练习2.

写一个脚本(前提:请为虚拟机新增一块硬盘,假设它为/dev/sdb),为指定的硬盘创建分区:

1.列出当前系统上所有的磁盘,让用户选择,如选择quit 则退出脚本:如果用户选择错误,就让用户重新选择;

2.当用户选择后,提醒用户确认接下来的操作可能会损坏数据,并请用户确认;如果用户选择y就继续,否则,让用户重新选择;

3.抹除那块硬盘上的所有分区(提示,抹除所有分区后执行sync命令,并让脚本睡眠3秒钟后再分区):并为其创建三个主分区,第一个为20M,第二个为512M,第三个为123M,且第三个为swap分区类型;(将分区命令通过echo传送给fdisk即可实现)

 

  1 脚本分析:
  2 
  3 1.删除分区: dd if=/dev/zero of=/dev/hda bs=512 count=1
  4 
  5   dd 用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换
  6 
  7   if= :输入文件名
  8 
  9   of=: 输出文件名
 10 
 11   bs : 指定读入/输出的块大小,字节 
 12 
 13   count:#块个数
 14 
 15   用空字节覆盖MAR引导,既删除分区整个硬盘分区
 16 
 17 将U盘当前状态保存下来成为一个文件。
 18   dd if=/dev/sdb of=/backup/ISO/Upan/save.iso
 19 
 20   cat /dev/cdrom > xx.iso
 21 
 22   mkisofs -r -o xx.iso /dev/cdrom
 23 
 24 2.取出硬盘列表:
 25 
 26   fdisk -l 2> /dev/null |grep "Disk /dev/[sh]d[a-z]" | awk -F: '{print $1}'
 27 
 28 3.脚本创建分区
 29 
 30   echo 'n
 31 
 32   n
 33 
 34   p
 35 
 36   1
 37 
 38   
 39 
 40   +20M
 41 
 42     w' | fdisk /dev/hda
 43 
 44 
 45 
 46 
 47 [root@localhost test]# cat disk.sh 
 48 #!/bin/bash
 49 #
 50 echo "Initial a disk..."
 51 echo -e "\033[31mWarning:\033[0m"
 52 fdisk -l 2> /dev/null |grep -o "^Disk /dev/[sh]d[a-z]"
 53 
 54 read -p "Your choice:" PARTDISK
 55 
 56 if [ $PARTDISK == 'quit' ];then
 57     echo "quit"
 58     exit 7
 59 fi
 60 
 61 until fdisk -l 2> /dev/null | grep -o "^Disk /dev/[sh]d[a-z]" | grep "^Disk $PARTDISK$" &> /dev/null;do
 62     read -p "Wrong option,Yourchoice aging:" PARTDISK
 63 done
 64 
 65 read -p "Will destroy all data, continue:y|n? " CHOICE
 66 
 67 until [ $CHOICE == 'y' -o $CHOICE == 'n' ];do
 68     read -p "Will destroy all data,continue:y|n? " CHOICE
 69 done
 70 if [ $CHOICE == 'n' ];then
 71     echo "quit"
 72     exit 9
 73 else
 74     dd if=/dev/zero of=$PARTDISK bs=512 count=1
 75     sync
 76     sleep 3
 77     echo 'n
 78     p
 79     1
 80 
 81     +20M
 82     n
 83     p
 84     2
 85 
 86     +512M
 87     n
 88     p
 89     3
 90 
 91     +128M
 92     t
 93     3
 94     82
 95     w' | fdisk $PARTDISK &> /dev/null
 96 
 97     partprobe $PARTDISK
 98     sync
 99     sleep 3
100     mkfs.ext4 ${PARTDISK}1
101     mkfs.ext4 ${PARTDISK}2
102     mkswap ${PARTDISK}3
103 fi
104 
105 
106 
107 
108 扩展:删除分区先检测是否已挂载
109 
110 #!/bin/bash
111 #
112 for I in `mount | grep "/dev/sdb" | awk '{print $1}'`;do
113     fuser -km $I          #fuser -km /dev/sda1 #杀死所有使用sda1的进程
114     umount $I
115     echo "$I umonut OK."
116 done        
117     

 

脚本分析:

1.删除分区: dd if=/dev/zero of=/dev/hda bs=512 count=1

  dd 用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换

  if= :输入文件名

  of=: 输出文件名

  bs : 指定读入/输出的块大小,字节 

  count:#块个数

  用空字节覆盖MAR引导,既删除分区整个硬盘分区

将U盘当前状态保存下来成为一个文件。
  dd if=/dev/sdb of=/backup/ISO/Upan/save.iso

  cat /dev/cdrom > xx.iso

  mkisofs -r -o xx.iso /dev/cdrom

2.取出硬盘列表:

  fdisk -l 2> /dev/null |grep "Disk /dev/[sh]d[a-z]" | awk -F: '{print $1}'

3.脚本创建分区

  echo 'n

  n

  p

  1

  

  +20M

 

posted @ 2016-12-01 17:32  信子2016  阅读(522)  评论(0编辑  收藏  举报