linux shell循环:for、while、until用法详解

2019-09-23 08:51:54刘景俊

找出分区利用率大于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