脚本完成磁盘分区格式化
脚本编程控制结构:
顺序
选择:
if
case
循环:
for:
for 变量 in 列表;do
循环体
done
例:写一个求和脚本SUM.sh,从1加到100:
#!/bin/bash
#
declare SUM=0
for I in {1..100}; do
let SUM+=I;
done
echo $SUM
for (( expr1; expr2; expr3 )); do
循环体
done
例:写一个求和脚本SUM.sh,从1加到100偶数和:
#!/bin/bash
#
declare -i SUM=0
for ((I=2;I<=100;I+=2)) ; do
let SUM+=I;
done
echo $SUM
while:
while CONDITION; do
statment
done
进入循环:条件满足
退出循环:条件不满足
例1:编写一个while.sh脚本:
#!/bin/bash
#
read -p "Input something: " STRING
while [ $STRING != 'quit' ]; do
echo $STRING | tr 'a-z' 'A-Z'
read -p "Again,Input someting: " STRING
done
例2:编写一个while.sh脚本:
#!/bin/bash
#
while ! who | grep "hadoop" &> /dev/null; do
echo "hadoop is not come."
sleep 5
done
echo "hadoop is logged in."
until:
until CONDITION; do
statment
....
done
进入循环:条件不满足
退出循环:条件满足
例1:编写一个untile.sh脚本:
#!/bin/bash
#
read -p "Input someting: " STRING
until [ $STRING == 'quit' ]; do
echo $STRING | tr 'a-z' 'A-Z'
read -p "Again Inputsometing: " STRING
done
例2:编写一个hadoop.sh脚本:
#!/bin/bash
#
until who | grep "hadoop" &> /dev/null; do
echo "hadoop is not come."
sleep 5
done
echo "hadoop is logged in."
课后练习:
写一个脚本:
1、通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线,
如果在线,就显示“ip is up.”,其中的IP要换为真正的IP地址,且以绿色显示;
如果不在线,就显示“ip is down.”,其中的IP要换为真正的IP地址,且以红色显示;
要求:分别使用while,until和for(两种方式)循环实现。
提示:ping:
-c #:指定ping次数;
-w #:指定ping间隔时长(以秒为单位);
awk:
awk 'PATTERN{ACTION}' file
PATTERN:处理内容的行
ACTION:处理动作
print $#:指定显示每行第#个字段
print $0:显示每行的所有字段
print $NF:显示每行的最后一个字段
例1:[root@localhost ~]# df -lh | awk '{print $1,$3}'
文件系统 已用
/dev/sda2 2.1G
/dev/sda3 36M
/dev/sda1 17M
tmpfs 0
/dev/sda7 19M
/dev/mapper/myvg-testlv
1008M 924M
例2:[root@localhost ~]# awk -F: '{print $1,$3}' /etc/passwd #“-F:” 表示分割符为“:”#
root 0
bin 1
daemon 2
写一个脚本(前提:请为虚拟机新增一块硬盘,假设它为/dev/adb),为指定的硬盘创建分区:
1、列出当前系统上所有的磁盘,让用户选择,如果选择quit则退出脚本;如果用户选择错误,就让用户重新选择;
2、当用户选择后,提醒用户确认接下来的操作可能会损坏数据,并请用户确认;如果用户选择y就继续,否则让用户重新选择;
3、抹除那块硬盘上的所有分区(提示,抹除所有分区后执行sync命令,并让脚本睡眠3秒钟后再分区);并为其创建三个主分区,第一个为20M,第二个为
512M,第三个为128M,且第三个为swap分区类型;(提示:将分区命令通过echo传送给fdisk即可实现)
fdisk -l | grep
dd if=/dev/zero of=/dev/sdb bs=512 count=1 #抹除硬盘上所有分区#
sync
sleep 3
[root@localhost ~]# fdisk -l 2> /dev/null | grep "Disk /dev/[sh]d[a-z]" | awk -F: '{print $1}' #显示系统所有盘区#
子例1:脚本setpart.sh实现在hda盘区创建三个主分区,第一个为20M,第二个为512M,第三个为128M,且第三个为swap分区类型;
#!/bin/bash
#
echo '
n
p
1
+20M
n
p
2
+512M
n
p
3
+128M
t
3
82
w' | fdisk /dev/hda
子例2:抹除hda硬盘上所有分区:
[root@localhost ~]# dd if=/dev/zero of=/dev/hda bs=512 count=1
[root@localhost ~]# sync #系统同步#
[root@localhost ~]# partprobe #内核重读#
[root@localhost ~]# fdisk -l /dev/hda
阅读(1049) | 评论(0) | 转发(0) |