找出分区利用率大于10%的分区,并发出警告/dev/sdaX will be full: 15%要求使用while read来实现
答案1:
#!/bin/bash
df |grep /dev/sd > /app/fenqu
while read line;do
used=$(echo $line |tr -s " " % |cut -d% -f5)
name=$(echo $line |cut -d" " -f1)
if (( $used > 10 ));then
echo "$name will be full:$used%"
fi
done < /app/fenqu
[root@centos6mini 3.19]# df |grep /dev/sd >/app/zuoye/3.19/6
[root@centos6mini 3.19]# cat /app/zuoye/3.19/6
/dev/sda5 28564480 1872060 25234756 7% /
/dev/sda2 20511356 70276 19392504 1% /app
/dev/sda1 194241 31785 152216 18% /boot
[root@centos6mini 3.19]# while read line ;do
> used=$(echo $line |tr -s " " % |cut -d% -f5)
> name=$(echo $line |cut -d" " -f1)
> if (( $used > 10 ));then
> echo "$name will be full:$used%"
> fi
> done </app/zuoye/3.19/6
/dev/sda1 will be full:18%
答案2:
#!/bin/bash
> df_h
df -h | grep ^/dev/[sh]d* >> df_h
while read disk;do
a=`echo $disk |grep -o "<[0-9]{0,3}%" | cut -d% -f1`
b=`echo $disk |grep -o "^[^[:space:]]+>"`
if [ $a -gt 10 ];then
echo "$b will be full: $a%"
fi
done < df_h
答案3:sed实现
#!/bin/bash
df |grep /dev/sd |while read disk;do
diskused=$(echo $disk |sed -r 's/.* ([0-9]+)%.*/1/')
diskname=$(echo $disk |sed -r 's@(/dev/sd[[:lower:]][[:digit:]]).*@1@')
if (( $diskused > 10 ));then
echo "$diskname will be full:$diskused%"
fi
done
until循环
until CONDITION; do
循环体
done
进入条件: CONDITION 为false
退出条件: CONDITION 为true
循环控制语句continue
用于循环体中
continue [N]:提前结束第N层的本轮循环,而直接进入下一 轮判断;最内层为第1层
while CONDTIITON1; do
CMD1
...
if CONDITION2; then
continue
fi
CMDn
循环控制语句break
用于循环体中
break [N]:提前结束第N层循环,最内层为第1层
while CONDTIITON1; do
CMD1
...
if CONDITION2; then
break
fi
CMDn
...
done
循环控制shift命令
shift [n]
用于将参量列表 list 左移指定次数,缺省为左移一次。
参量列表 list 一旦被移动,最左端的那个参数就从列表中删 除。while 循环遍历位置参量列表时,常用到 shift
./doit.sh a b c d e f g h
./shfit.sh a b c d e f g h
特殊用法
1、while循环的特殊用法(遍历文件的每一行):
while read line; do










