zoukankan      html  css  js  c++  java
  • Shell入门教程:流程控制(5)for 循环

    for循环的运作方式,是将 串行 的元素的元素一一取出,依序放入制定的变量中,然后重复执行含括的命令区域(在 do 与 done 之间),直到所有元素取尽为止。

    其中,串行是一些字符串的组合,彼此用 $IFS 所定义的 分隔符(如空格符)隔开,这些字符串称为字段。

    for的语法结构如下:

    for 变量 in 串行
    do
        命令区域
    done

    举例:

    for i in 1 2 3 4
    do
    	echo $i
    done

    for循环的语法中,“in串行”这段可以省略不写,此时,Bash会由命令行读取各个参数,轮循代入变量中,作用同以下用法:

    for 变量 in $@
    do
    	命令区域
    done

    $@ 代表命令行所有的参数。

    for循环经常用在分割字符串行,取出字段元素值。

    IFS=':'
    PL="root:x:0:0:root:/root:/bin/Bash"
    
    for f in $PL
    do
    	echo $f
    done

    比较经典的做法是取出 CSV 文件各行的字段。CSV文件是一种用,(逗号)分隔数据字段的纯文本文件,适合担任数据库之间汇入、导出数据的中介。

    取出CSV文件各行字段的做法如下:

    #!/bin/bash
    
    declare -i i=0
    for line in $(cat cvsfile.txt)
    do
    	i=i+1
    	echo -n "第 $i 行的字段有:"
    	save_ifs=$IFS
    	IFS=','
    	for f in $line
    	do
    		echo -n $f ' '
    	done
    	IFS=$save_ifs
    	echo 
    done
    

    for循环也经常用在处理目录中的文件:

    #!/bin/bash
    
    DIR="/root"
    for f in $(ls $DIR)
    do
    	echo '文件:' $f
    done
    

    列出 /root 目录下的文件,但不包括隐藏文件。

    再看一个例子:

    #!/bin/bash
    
    DIR="/var"
    cd $DIR
    for f in $(ls $DIR)
    do
    	[ -d $f ] && du -s $f
    done
    

    这个程序用来列出 /var 目录下各个子目录占用的磁盘空间大小。

    for 的另一种用法:

    for ((初始条件; 终止条件; 异动项))
    do
        命令区域
    done

    举例:

    #!/bin/bash
    
    declare -i i sum
    for ((i=1; i<=10; i=i+1))
    do
    	let sum+=i
    done
    
    echo $sum

    for 无穷循环:

    for ((;1;))
    do
    	命令区域
    done

    要想中断无穷循环,得键入 Ctrl + C。

  • 相关阅读:
    一个好的时间函数
    Codeforces 785E. Anton and Permutation
    Codeforces 785 D. Anton and School
    Codeforces 510 E. Fox And Dinner
    Codeforces 242 E. XOR on Segment
    Codeforces 629 E. Famil Door and Roads
    Codeforces 600E. Lomsat gelral(Dsu on tree学习)
    Codeforces 438D The Child and Sequence
    Codeforces 729E Subordinates
    【ATcoder】D
  • 原文地址:https://www.cnblogs.com/52php/p/5669938.html
Copyright © 2011-2022 走看看