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 20:46
下一篇 2016-08-21 20:46

相关推荐

  • vim基本总结

    ASCII可以将计算机存储的0或1转成我们认识的文字。在Linux中,绝大部分的配置文件都是以ASCII的纯文本形态存在。通过文本编辑器,可以实现对这些文本文件的更改。常风的文本编辑器有emacs, pico,nano,joe与vi(vim是vi的升级版)等。那么为会么要学vi呢? l 因为vi是内置编辑器,系统安装好就有了 l 很多软件…

    2017-08-05
  • Linux安全和openssl、gpg加密

                     Linux安全和openssl、gpg加密 本章内容: 安全机制 对称加密 不对称加密 散列算法 PKI和CA openssl 证书管理 gpg   加密需要: 不加密的流量易受攻击性 密码/数据嗅探 数据操作 验证操作 相当…

    系统运维 2016-10-09
  • 马哥教育网络班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
  • 软链接和硬链接及两者之间的不同

    在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号…

    Linux干货 2016-12-05
  • 基于ssl功能实现mysql主从复制

    基于ssl功能实现mysql主从复制         证书准备:                                  CA证书…

    2016-11-22
  • 程序包管理之yum:yum源\库配置以及源码编译安装

    程序包管理之yum yum概念 什么是yum 由yellow dog这一发行版的开发者Terra Soft研发。 使用rpm命令安装软件包时,解决不了依赖关系,就会很麻烦,使用yum可以自行解决依赖关系。 删除某个安装包,如果是用rpm删除,就卸载掉某个依赖关系从而导致其他软件包不能使用。 yum特点 可同时配置多个软件仓库 简洁的配置文件/etc/yum.…

    Linux干货 2016-11-22