第一部分:Linux命令行
    《Linux命令行与shell脚本编程大全》 第一章:初识Linux shell
    《Linux命令行与shell脚本编程大全》 第二章:走进shell
    《Linux命令行与shell脚本编程大全》 第三章:基本的bash shell命令
    《Linux命令行与shell脚本编程大全》 第四章:更多的bash shell命令
    《Linux命令行与shell脚本编程大全》 第五章:使用Linux环境变量
    《Linux命令行与shell脚本编程大全》 第六章:理解Linux文件权限
    《Linux命令行与shell脚本编程大全》 第七章:管理文件系统
    《Linux命令行与shell脚本编程大全》 第八章:安装软件程序
    《Linux命令行与shell脚本编程大全》 第九章:使用编辑器

    第二部分:shell脚本编程基础
    《Linux命令行与shell脚本编程大全》 第十章:构建基本脚本
    《Linux命令行与shell脚本编程大全》 第十一章:使用结构化命令
    《Linux命令行与shell脚本编程大全》 第十二章:更多的结构化命令
    《Linux命令行与shell脚本编程大全》 第十三章:处理用户输入
    《Linux命令行与shell脚本编程大全》 第十四章:呈现数据
    《Linux命令行与shell脚本编程大全》 第十五章:控制脚本

    第三部分:高级shell编程
    《Linux命令行与shell脚本编程大全》 第十六章:创建函数
    《Linux命令行与shell脚本编程大全》 第十七章:图形化桌面上的脚本编程
    《Linux命令行与shell脚本编程大全》 第十八章:初识sed和gawk
    《Linux命令行与shell脚本编程大全》 第十九章:正则表达式
    《Linux命令行与shell脚本编程大全》 第二十章:sed进阶
    《Linux命令行与shell脚本编程大全》 第二十一章:gawk进阶
    《Linux命令行与shell脚本编程大全》 第二十二章:使用其他shell

    第四部分:高级shell脚本编程主题
    《Linux命令行与shell脚本编程大全》 第二十三章:使用数据库
    《Linux命令行与shell脚本编程大全》 第二十四章:使用Web
    《Linux命令行与shell脚本编程大全》 第二十五章:使用E-mail
    《Linux命令行与shell脚本编程大全》 第二十六章:编写脚本实用工具
    《Linux命令行与shell脚本编程大全》 第二十七章:shell脚本编程进阶


    第十二章:更多的结构化命令

    for
    基本格式

       for var in list
    do
        commands
    done
      


    可以通过下面几种方式指定list列表
    1.罗列

       for var in A B C D
      

    如果罗列中的字符串中有特殊字符,比如单引号,可以
    1)使用转义字符
    2)使用双引号

    2.从变量读取列表

       list="A B C D"
    list=$list" E"
    for var in $list
      
    3.从命令中读取值

       for var in `cat $file`
      

    注意:这种情况换行也是字段分隔符

    for循环结束之后,$var保存着列表中的最后一个值

    更改字段分隔符
    环境变量IFS :internal field separator,内部字段分隔符

    默认情况下,空格、制表符和换行符为字段分隔符
    修改:

       IFS=$'
    '
    IFS=:
    IFS=$'
    :;"'
      

    (上面的$是做什么的)

    如果只是想临时修改
    IFS.OLD=$IFS
    IFS=$' '
    IFS=$IFS.OLD

    用通配符读取目录
    可以用for命令遍历目录,但是必须在文件名或者路径名中使用通配符,它会强制shell使用文件扩展匹配(file globbing)
    文件扩展匹配是生成匹配指定的通配符的文件名或路径的过程

       for file in /home/su1216/test/* /home/su1216/abc
    do
        if [-d "$file"]
        #文件名如果有空格,那么需要将其用引号包起来
        then
            echo "$file is a directory"
        elif [-f "$file"]
            echo "$file is a file"
        else
            echo "$file is not exist"
        fi
    done
      


    C语言风格的for命令
    for ((a = 1; a < 10; a++))
    注意:
    1)给变量赋值可以有空格
    2)条件中的变量不以美元符号开头
    3)迭代过程中的算式未用expr命令格式
    使用多个变量

       for (( a = 1, b = 10; a <= 10; a++ ,b-- ))
    do
        echo "$a - $b"
    done
      


    while命令

       while test command
    do
        other commands
    done
      

    根据test命令的退出状态码决定是否继续循环

    使用多个测试命令
    只有最后一个测试命令的退出状态码会被用来决定什么时候退出循环

       var1=10
    while echo $var1
          [ $var1 -ge 0 ]
    do
        echo "This is inside the loop"
        var1=$[ $var1 - 1 ]
    done
      

    注意:每个测试条件都在单独的行上,每次迭代,所有测试条件都会被执行!

    until命令
    与while工作方式相反
    基本格式

       until test commands
    do
        other commands
    done
      


    也可以有多条测试命令,同while

    嵌套循环

       var1=3
    until [ $var1 -eq 0 ]
    do
        echo "Outer loop: $var1"
        var2=1
        while [ $var2 -lt 5 ]
        do
            var3=`echo "scale=4; $var1 / $var2" | bc`
        echo "    Inner loop:$var1 / $var2 = $var3"
        var2=$[ $var2 + 1 ]
        done
        var1=$[ $var1 - 1 ]
    done
      


    控制循环
    break
    continue
    他们都可以指定跳出/继续的循环层数
    break n
    continue n
    n默认都为1

    处理循环的输出
    可以在循环的done之后接管输出,比如

       for var in A B C
    do
        echo "$var"
    done > out.txt
      

    当然也可以使用管道

       for var in A B C
    do
        echo "$var"
    done | sort
      


    转贴请保留以下链接

    本人blog地址

    http://su1216.iteye.com/

    http://blog.csdn.net/su1216/