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

Linux shell流程控制

时间:2015-10-28 07:07:59      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:shell语句流程控制

一、一些说明

    系统:Ubuntu12.04TLS 64位

    bash:GNU bash, 版本 4.2.25(1)-release (x86_64-pc-linux-gnu)


二、条件语句

    (1)语法:

    if 表达式
    then 
        Commands
    [elif 表达式
     then
        Commands
    ......

    else
        Commands]
    fi

        其中if和fi必须成对使用

     (2)例子: if.sh

     #!/bin/bash    
    
    score=80
    
    if [ $score -ge 90 ]
    then
        echo "优秀"
    elif [ $score -ge 70 ]
    then
        echo "良好"
    elif [ $score -ge 60 ]
    then
        echo "合格"
    else
        echo "不合格"
    fi

         $sh if.sh

        结果:“良好”


三、多路分支语句

    (1)语法:

        case 变量 in
            模式1)
                commands
                ;;
            模式2)
                commands
                ;; #每一中情况由两个分号结束
             ......
            模式n)
                commands
                ;;  #最后的结束符可以省略
         esac

           类似与C语言的switch/case,其中每一个case是以break结束的。   

            模式可以是正则表达式,也可以是单个字符串

            正则可以使用:

                *          表示任意字符串

               ?         表示任意字符

                [a-z]    表示a到z的任意字符

                [abc]   表示a、b、c三者中的任意一个

                |          表示多重选择

    (2)例子:case.sh

    #!/bin/bash    
    
    str="mouse"
    
    case $str in
        "cat")
        echo "this is a cat"
        ;;
        
        "dog" | "mouse")
        echo "this is a dog"
        ;;
        
        "cattle")
        echo "this is a cattle"
        ;;
        
        *)
        echo "this is a $str"
    esac

            "*" 表示默认情况,类似与C语言中switch/case中的default     

         $sh case.sh

         结果为: this is a dog

          

四、循环语句

    【1】for循环

           (1)语法:

        for 变量名  in 单词表
        do
            commands
        done

            (2)例子: for.sh

        #!/bin/bash    
        
        list=`ls`
        
        for file in $list
        do
            echo "filename=$file"
        done

                $sh for.sh

                结果:

                    filename=1.c
                    filename=2.c
                    filename=format
                    filename=for.sh


    【2】while循环

                    (1)语法:       

            while 命令或表达式
            do
                commands
            done

                    (2)例子:while.sh

            #!/bin/bash    
            
            i=5
            
            while [ $i -ge 0 ]
            do
                echo "i=$i"
                i=`expr $i - 1`
            done

                         $sh while.sh

                       结果:

                                i=5
                                i=4
                                i=3
                                i=2
                                i=1
                                i=0
            

      【3】until循环

                (1)语法:

           until 表达式
           do
               commands
           done

                (2)例子:until.sh

            #!/bin/bash    
            
            i=4
            
            until [ $i -lt 0 ]
            do
                echo "i = $i"
               
                i=`expr $i - 1`
            done

                        $sh until.sh   

                        结果:

                            i = 4
                            i = 3
                            i = 2
                            i = 1
                            i = 0
    

五、循环控制语句

    【1】 break

       (1) break 跳出当前循环

    #!/bin/bash    
    
    i=4
    
    while [ $i -lt 9 ]
    do 
        echo "i=$i"
        i=`expr $i + 1`
        if [ $i -eq 6 ]
        then
            echo "i=$i, and break"
            break  #当i=6时,循环将结束
        fi
    done

            结果:

                i=4
                i=5
                i=6, and break

        (2)break n 跳出n层循环

        

     #!/bin/bash        
                    
     i=4
     j=7
     k=9
                    
     for ((; i > 0; i-=1))
     do
         echo "i=$i"
         for ((; j > 0; j-=1))
         do
             echo "j=$j"
             for ((; k > 0; ))
             do
                 k=`expr $k - 1`
                 echo "k=$k"
                 if [ 0 -eq `expr $k % 2`  ]
                 then
                     echo "break 2"
                     break 2 #将跳到最外层循环
                 fi
             done
          done
      done

            结果:

                        i=4
                        j=7
                        k=8
                        break 2
                        i=3
                        j=7
                        k=7
                        k=6
                        break 2
                        i=2
                        j=7
                        k=5
                        k=4
                        break 2
                        i=1
                        j=7
                        k=3
                        k=2
                        break 2

    【2】continue

        (1)continue 结束当前循环,转到最近一层循环,开始下一轮循环

        #!/bin/bash
        
        i=5
        
        while [ $i -gt 2  ]
        do
            i=`expr $i - 1`
            if [ $i -eq 4  ]
            then
                echo "this is 4, and continue"
                continue #i=4时,后面的echo不会执行
            fi
            
            echo "i=$i"
        done

             结果:

                    this is 4, and continue
                    i=3
                    i=2

          (2)continue n   结束当前循环,转到最近n层循环,开始下一轮循环

        #!/bin/bash
        for ((i = 1; i < 3; i++))
        do
            echo "i=$i"
            for ((j = 1; j < 3; j++))
            do
                echo "j=$j"
                for ((k = 1; k < 3; ))
                do
                    echo "k=$k"
                    if [ 1 -eq `expr $k % 2`  ]
                    then
                        echo "k=$k, continue 3"
                        k=`expr $k + 1`
                        continue 3   #将跳转到最外层
                    fi
                done
            done
        done

                结果:

                    i=1
                    j=1
                    k=1
                    k=1, continue 3
                    i=2
                    j=1
                    k=1
                    k=1, continue 3

本文出自 “风雪舞者” 博客,请务必保留此出处http://happytree007.blog.51cto.com/6335296/1707005

Linux shell流程控制

标签:shell语句流程控制

原文地址:http://happytree007.blog.51cto.com/6335296/1707005

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