脚本编程完成磁盘分区格式化_2019.04.15:22_12:00-13:00_mage_linux_log

本文介绍了如何使用Linux脚本进行磁盘分区和格式化的自动化操作,包括利用until和c形式的for循环进行条件判断,以及awk命令的基础应用。通过实例,演示了编写脚本自动检测网络中主机的在线状态,以及创建和格式化磁盘分区,特别是警告用户潜在的数据丢失风险,并提供交互式的用户确认环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


回顾
脚本编程控制结构:

顺序
选择
	if
	case
循环
	for
	while
	until
#条件满足进入循环;条件不满足退出循环
while CONDITION; do
	statement
	...
done

until循环

#和while相反;条件不满足进入循环;条件满足退出循环
until CONDITION; do
	statement
	...
done

练习和while对比

#!/bin/bash
#showdisk.sh
#while版本
cat <<EOF
D|d)show disk usages;
M|m)show memory usages;
S|s)show Swap usages;
*)quit
EOF
read -p "Your choice:" CHOICE
while [ $CHOICE != 'quit' ]; do
	case $CHOICE in 
	D | d)
		echo "Disk usage:"
		df -Ph ;;
	M | m)
		echo "Memory usages:"
		free -m | grep -B 1 Mem ;;
	S | s)
		echo "Swap usage:"
		free -m | grep -B 1 Swap;;
	*)
		echo "Unknown."
	esac	
read -p "Again,your choice:" CHOICE
done
#!/bin/bash
#showdisk.sh
#until版本
cat <<EOF
D|d)show disk usages;
M|m)show memory usages;
S|s)show Swap usages;
*)quit
EOF
read -p "Your choice:" CHOICE
until [ $CHOICE = 'quit' ]; do
	case $CHOICE in 
	D | d)
		echo "Disk usage:"
		df -Ph ;;
	M | m)
		echo "Memory usages:"
		free -m | grep -B 1 Mem ;;
	S | s)
		echo "Swap usage:"
		free -m | grep -B 1 Swap;;
	*)
		echo "Unknown."
	esac	
read -p "Again,your choice:" CHOICE
done

c形式的for循环

for (( expr1 ; expr2 ; expr3 )); do
	statement
	...
done
#expr1:指定初始条件
#expr2:判断什么时候退出
#expr3:修正变量值
#以前
declare -i SUM=0
for I in {1..100}; do
	let SUM+=$I
	echo $SUM
done

#现在
declare -i SUM=0
for ((I=1;I<=100;I++)); do
	let SUM+=$I
done
	echo $SUM

练习

写一个脚本,使用ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线;如果在线就显示:“ip:xxx.xxx.xxx.xxx is up”,以绿色显示;如果不在线就显示:“ip:xxx.xxx.xxx.xxx is down”,以红色显示。要求:分别使用while,until,for(两种)实现。
ping -c 10 xxx.xxx.xxx.xxx #ping 10次后结束
-W #指定连接超时

awk命令基础

awk 'PATTERN{ACTION}' file
ACTION:print
变量:$1,$2,...; $NF:最后一个字段
指定分隔符:-F: 默认为空格 
eg:df -Ph | awk '{print $1,$3}' #打印df命令执行结果的第一列和第三列 
eg:awk -F: '{print $1,$3}' /etc/passwd
fdisk -l 2> /dev/null | grep "^Disk /dev/[sh]d[a-z]" #找出硬盘非分区
fdisk -l 2> /dev/null | grep "^Disk /dev/[sh]d[a-z]" | awk -F: '{print $1}' #取出设备名"Disk /dev/sda"

练习

脚本创建分区

#!/bin/bash
#
echo 'n
p
1
+20M
N
P
2
+512M
N
P
3
+128M
t
3
82
w ' | fdisk /dev/hda

练习(自动分区格式化)

写一个脚本,要求:
1,列出系统上所有磁盘,让用户选择,quit则退出脚本;如果选择错误就重新选择;
2,当用户选择后提醒用户接下来的操作可能会损坏数据,并请用户确认;y就继续,n就退出;否则重新选择;
3,抹除该硬盘所有分区(提示:抹除后执行sync命令,并让脚本睡眠3秒后再分区),并为其创建三个主分区,第一个20M,第二个512M,第三个128M,且第三个为swap类型的分区。

#!/bin/bash
#partdisk.sh
#!/bin/bash
#partdisk.sh
echo "Initializing a disk..."
echo -e "\033[31mWarning: \033[0m"
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 7
fi
until fdisk -l 2> /dev/null | grep "^Disk /dev/[sh]d[a-z]" | grep "^Disk $PARTDISK$" &> /dev/null; do
        read -p "Wrong option,Your choice again:" PARTDISK
done

read -p "Will destroy all data,continue:" CHOICE
until [ $CHOICE == 'y' -o $CHOICE == 'n' ]; do
read -p "Will destroy all data,continue:" CHOICE
done
if [ $CHOICE == 'n' ]; then
        echo "Quit."
        exit 9
else
for I in `mount | grep "^$PARTDISK$ | awk '{print $1}'"`; do
	fuser -km $I
	umount $I
	echo "$I umount ok."
done
dd if=/dev/zero of=$PARTDISK bs=512 count=1
sync
sleep 3
echo "Partition."
echo 'n
p
1
+20M
N
P
2
+512M
N
P
3
+128M
t
3
82
w ' | fdisk $PARTDISK &> /dev/null
partprob $PARTDISK
sync
sleep 2
mke2fs -j ${PARTDISK}1 &>/dev/null
mke2fs -j ${PARTDISK}2 &>/dev/null
mkswap ${PARTDISK}3
fi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值