码迷,mamicode.com
首页 > 系统相关 > 详细

shelll脚本 for while until 循环

时间:2019-08-26 11:34:49      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:glob   des   添加   desc   判断   copyright   应该   初始化   while 循环   

流程控制

编程中的逻辑处理:

顺序执行
选择执行
循环执行

循环

循环执行
    将某代码段重复运行多次
    重复运行多少次
        循环次数事先已知
        循环次数事先未知
    有进入条件和退出条件
?for, while, until

for循环

for 变量名 in 列表;do
    循环体
 done
执行机制:
依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束

for循环

列表生成方式:
(1) 直接给出列表
(2) 整数列表:
    (a) {start..end}
    (b) $(seq [start [step]] end) 
(3) 返回列表的命令
    $(COMMAND)
(4) 使用glob,如:*.sh
(5) 变量引用
    $@, $*

for特殊格式

双小括号方法,即((…))格式,也可以用于算术运算
双小括号方法也可以使bash Shell实现C语言风格的变量操作
    I=10
    ((I++)) 
for循环的特殊格式:
 for ((控制变量初始化;条件判断表达式;控制变量的修正表达式))
    do
    循环体
 done
控制变量初始化:仅在运行到循环代码段时执行一次
控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断

练习:用for实现

1、判断/var/目录下所有文件的类型

read -p "input catalogue (eg:/var/):" DIRNAME
for FILE in `ls -l ${DIRNAME} | tr -s ‘ ‘|cut -d‘ ‘ -f9`
        do
        NAME=${DIRNAME}$FILE
        [ -b $NAME ] && echo "${NAME} The is blockfile"
        [ -c $NAME ] && echo "${NAME} The is devicefile"
        [ -d $NAME ] && echo "${NAME} The is catalogue file"
        [ -f $NAME ] && echo "${NAME} The is flat file"
        [ -L $NAME ] && echo "${NAME} The is link file"
        [ -p $NAME ] && echo "${NAME} The is pipe file"
        [ -S $NAME ] && echo "${NAME} The is paper file"
done

? 2、添加10个用户user1-user10,密码为8位随机字符

for NU in `seq 10`
 do
 useradd user$NU
 PASS=`cat /dev/urandom | tr -dc ‘0-9‘|head -c8`
 echo user$NU:$PASS >> /data/userpasswd.txt
 echo $PASS | passwd --stdin user$NU &> /dev/null
 passwd -e user$NU
 echo "user$NU is created"
done   

3、编写脚本,提示输入正整数n的值,计算1+2+…+n的总和

 #!/bin/bash
 sum=0
read -p "pleass input positive integer:" N
for (( i=1;i<=$N;i++ ));do                                       
        let sum+=i
done
echo $sum

4、计算100以内所有能被3整除的整数之和

#!/bin/bash
#
#********************************************************************
#Author: wangyakun
#Date: 2019-08-22
#FileName: for_3number.sh
#URL: http://www.magedu.com
#Description: The test script
#Copyright (C): 2019 All rights reserved
#********************************************************************
sum=0
for (( i=3;i<=100;i+=3 ));do
        let sum+=i              
done
echo $sum

5、编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态

 #!/bin/bash
read -p " pleass input Network segment (eg:192.168.7.0):" IPS
NET=`echo $IPS | sed -nr ‘s/(.*)\..*\.[^.]$/\1/p‘`
for i in {1..255};do
        {
        for j in {1..255};do
                {
                ping -c1 -w1 ${NET}.$i.$j &> /dev/null && echo "${NET}.$i.$j is up"||echo "${NET}.$i.$j is down"
                }&
        done
        }&
        wait
done
wait
echo "scan hostis finished"  

while循环

while CONDITION; do
循环体
 done
?CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后
会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”
终止循环
?因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被
修正
?进入条件:CONDITION为true
?退出条件:CONDITION为false

until循环

?until CONDITION; do
循环体
?done
?进入条件: CONDITION 为false
?退出条件: CONDITION 为true

循环控制语句continue

?用于循环体中
?continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为
第1层
 while CONDTIITON1; do
CMD1
···
if CONDITION2; then
continue
fi
CMDn
...
 done

循环控制语句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
示例:doit.sh
#!/bin/bash
# Name: doit.sh
# Purpose: shift through command line arguments
# Usage: doit.sh [args]
while [ $# -gt 0 ] # or (( $# > 0 ))
do
 echo $*
 shift
done
示例:shift.sh
#!/bin/bash
#step through all the positional parameters
until [ -z "$1" ] 
do
 echo "$1"
 shift
done
echo 

创建无限循环

while true; do
循环体
?done
?until false; do
循环体
?Done

shelll脚本 for while until 循环

标签:glob   des   添加   desc   判断   copyright   应该   初始化   while 循环   

原文地址:https://blog.51cto.com/13626938/2432539

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!