bash 循环语句for、while、until

循环执行

循环执行
    定义:将某段代码有次数或无次数循环执行多次。
    构成要素:退出条件和进入条件
    循环的三种语句:for、while、until

for循环:

 
    格式
    for 变量 in 列表;do
        循环执行语句
    done
    
    执行机制:
    依次将列表中的元素赋值给“变量名” ; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束
  
  列表生成方式:
      1、直接给出生成列表
      2、{1..10} 注意:{1..$变量名}是错误的写法
          `seq start step end`  start:起始值 (可以写可不写)
                                step:步长(可以写可不写)
                                end:终止值,可以 $变量名
     3、返回列表的命令                                                           
        $(common) 例如:`ls /var/*`
     4、使用 glob, 如: *. sh
       5、变量引用;
        $@, $*
    
    for循环类似c++用法
        for ((控制变量初始化;条件判断表达式;控制变量的修正表达式))
        do
            循环体
        done

for循环练习题

   
    1、判断/var/目录下所有文件的类型
    2、 添加10个用户 user1 - user10,密码同用户名
    3、 /etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的文件输出为文件加stop
    ,以S开头的文件输出为文件名加start;
    “ K34filename stop”
    “S66filename start”
    4、写一个脚本,提示输入正整数n的值,计算1+2+3+…n的总和
    5、 打印九九乘法表

    

   
    答案一
        [root@centos7 bin]# cat varfor.sh 
    #!/bin/bash
    for fname in `ls -d /var/*`             注意:ls -d /var/*列出的是文件的绝对路径,如果用ls /var/列出的为相对路径,需要到/var/目录下才能判断
    do
	if [ -h $fname ];then
		echo "file $fname  is symbolic link"
	elif [ -d $fname ];then
		echo "file $fname is dirctor"
	elif [ -f $fname ];then
		echo "file $fname is commom file"
	elif [ -b $fname ];then
		echo "file $fname is a block device "
	else  [ -c $fname ]
		echo "file $fname is a character file"
	fi
    done

    [root@centos7 bin]# 
    
    
    答案:2
    [root@centos7 bin]# cat useraddfor.sh 
    #!/bin/bash
    for username in user{1..10};do
	if id -u $username >/dev/null 2>&1;then
		echo "user exit"
	else 
		useradd $username
		echo "useradd success"
		echo "$username:$username" |chpasswd
	fi
    done
    [root@centos7 bin]# 
    
    答案:3
    
    [root@centos7 bin]# cat   rc3d.sh 
    #!/bin/bash
    for fname in $(ls /etc/rc.d/rc3.d);do
	if	[[ "$fname" =~ ^[kK].* ]];then
		echo "$fname stop"
	elif [[ "$fname" =~ ^[sS].* ]];then
		echo "$fname start"
	fi
    done
    [root@centos7 bin]# 
    
    答案四:
        
        [root@centos7 bin]# cat readnsum.sh 
        #!/bin/bash
        #name:wangnannan
        read -p "please input a inter:" int
        if let $int+0 ;then
	    for i in `seq 1 $int`;do
		let sum+=$i
	    done
        else 
	    echo "you input is not a integer"
    	    exit 22 
        fi
        echo "from 1 to $int sum is :$sum"
        [root@centos7 bin]#
        
        答案5
        [root@centos7 until]# cat chengfabiaofor2.sh 
        #!/bin/bash
        #name:wangnannan
        for ((i=1;i<=9;i++));do
             for((j=1;j<=i;j++));do
              echo -ne "\033[41;41;41;41;32;4m$j*$i=$[j*i]\033[m \t"
             done
             echo
        done
        [root@centos7 until]# 
        
        
        [root@centos7 bin]# cat chengfabiao.sh 
        #!/bin/bash
        for i in {1..9};do
             for j in `seq 1 $i `;do
                  echo -e "$j*$i=$[ $i*$j ] \c "
             done
             echo -e "\n"
        done
        [root@centos7 bin]#

while循环

    
    循环格式
        while 条件;do   
            循环语句
        done
    
    循环机制:
        循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“ false”终止循环
        因此: CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正
    
    循环要素:
        进入循环:条件为真
        退出循环:条件为假
        
    while循环特殊格式
        while read line;do
            循环体
        done < /path/somefile
        循环机制:依次读取somefile文件中的每一行,将值赋给line 变量

until循环

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

循环控制语句:

continue:退出当次循环
break:退出整个循环

创建无线循环

while true ;do

    循环语句

done

until false ;do

    循环语句

done

原创文章,作者:wangnannan,如若转载,请注明出处:http://www.178linux.com/37456

(0)
wangnannanwangnannan
上一篇 2016-08-21
下一篇 2016-08-21

相关推荐

  • 第一周博客作业

    前言:这几周的课程大部分开班前就掌握了的,这次学的细一点,顺便学一下markdown写博客、排版。内容有部分是前几期学员写的,觉得写得不错,就斗胆截取了,还有部分是自己写的,也有一些是百度到的内容。 目录 一、描述计算机的组成及其功能 二、linux发行版 三、linux哲学思想 四、常用命令 五、如何获取命令的帮助信息 六、linux发行版的基础目录名称命…

    Linux干货 2017-01-09
  • linux下VMware Tools安装方法

    关于VMware Tools 是虚拟机里面的驱动,和各种实用工具,安装了vmware tools,你的虚拟机就可以打开DX3D的支持,鼠标想移出虚拟机也不需要按组合键,文件可以从主机直接拖动复制到虚拟机里面,虚拟机的分辨率也会自动跟随窗口调整而变化,还能解决图形界面下的卡顿,总之就是拓展了虚拟机的功能,方便使用。     &nb…

    Linux干货 2016-08-04
  • ip子网划分

    ip子网划分 人们为了通信方便,给每台计算机分配了一个类似我们电话号码一样的标识地址。IP就好比一个人的指纹一样,在INTERNET中是独一无二的(公网中)。我们可以通过ip查询到使用该ip的主机。 现在的IP分为ipv4和ipv6。前者是32位二进制组成,为了防止IP不够用由此研发出后者ipv6,ipv6是由128位二进制组成。ipv6中包含ip的数量相当…

    Linux干货 2017-07-01
  • 马哥教育网络班21期-第二周课程作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 cp即copy的简写,我们可以用它来复制一些文件即将,源文件的数据流复制到目的文件中。和下面要讲的rm,mv,一样都是一些非常基础的命令。关于这个命令,我们有个小窍门,那就是根据 ls file这个命令是否执行成功来判断file文件是否存在。 关于cp,我们有一些要点要注意: cp…

    Linux干货 2016-07-07
  • day7作业练习

    1、显示当前系统root、mage或wang用户的UID和默认shell  2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包 括下划线)后面跟一个小括号的行  3、使用egrep取出/etc/rc.d/init.d/functions中其基名     v …

    系统运维 2016-08-08
  • 马哥教育网络班21期+第7周课程练习

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; [root@localhost ~]#mke2fs -t ext4 -b 2048 -m 2 -L &qu…

    Linux干货 2016-08-15