• shell专题(七):流程控制(重点)


    7.1 if 判断

    1.基本语法

    if [ 条件判断式 ];then

      程序

    fi

    或者

    if [ 条件判断式 ]

      then

        程序

    fi

    注意事项:

    1[ 条件判断式 ],中括号和条件判断式之间必须有空格

    2if后要有空格

    2.案例实操

    1)输入一个数字如果1则输出banzhang zhen shuai,如果是2,则输出cls zhen mei,如果是其它,什么也不输出。

    [atguigu@hadoop101 datas]$ touch if.sh
    [atguigu@hadoop101 datas]$ vim if.sh
    
    #!/bin/bash
    
    if [ $1 -eq "1" ]
    then
            echo "banzhang zhen shuai"
    elif [ $1 -eq "2" ]
    then
            echo "cls zhen mei"
    fi
    
    [atguigu@hadoop101 datas]$ chmod 777 if.sh 
    [atguigu@hadoop101 datas]$ ./if.sh 1
    banzhang zhen shuai

    7.2 case 语句

    1.基本语法

    case $变量名 in

      "1"

        如果变量的值等于值1,则执行程序1

        ;;

      "2"

        如果变量的值等于值2,则执行程序2

        ;;

      …省略其他分支

      *

        如果变量的值都不是以上的值,则执行此程序

        ;; 

    esac

    注意事项:

    1) case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。

    2) 双分号;;”表示命令序列结束,相当于java中的break

    3) 最后的*)”表示默认模式,相当于java中的default。

    2.案例实操

    1)输入一个数字如果1,则输出banzhang,如果是2,则输出cls,如果是其它输出renyao

    [atguigu@hadoop101 datas]$ touch case.sh
    [atguigu@hadoop101 datas]$ vim case.sh
    
    !/bin/bash
    
    case $1 in
    "1")
            echo "banzhang"
    ;;
    
    "2")
            echo "cls"
    ;;
    *)
            echo "renyao"
    ;;
    esac
    
    [atguigu@hadoop101 datas]$ chmod 777 case.sh
    [atguigu@hadoop101 datas]$ ./case.sh 1

    7.3 for 循环

    1.基本语法1

    for (( 初始值;循环控制条件;变量变化 ))

      do

        程序

      done

    2.案例实操

    1)从1加到100

    [atguigu@hadoop101 datas]$ touch for1.sh
    [atguigu@hadoop101 datas]$ vim for1.sh
    
    #!/bin/bash
    
    s=0
    for((i=0;i<=100;i++))
    do
            s=$[$s+$i]
    done
    echo $s
    
    [atguigu@hadoop101 datas]$ chmod 777 for1.sh 
    [atguigu@hadoop101 datas]$ ./for1.sh 
    “5050

    3.基本语法2

    for 变量 in 1 2 3…

      do

        程序

      done

    4.案例实操

    1)打印所有输入参数

    [atguigu@hadoop101 datas]$ touch for2.sh
    [atguigu@hadoop101 datas]$ vim for2.sh
    
    #!/bin/bash
    #打印数字
    
    for i in $*
        do
          echo "ban zhang love $i "
        done
    
    [atguigu@hadoop101 datas]$ chmod 777 for2.sh 
    [atguigu@hadoop101 datas]$ bash for2.sh cls xz bd
    ban zhang love cls
    ban zhang love xz
    ban zhang love bd

    2比较$*$@区别

    (a)$*$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数

    [atguigu@hadoop101 datas]$ touch for.sh
    [atguigu@hadoop101 datas]$ vim for.sh
    
    #!/bin/bash 
    
    for i in $*
    do
          echo "ban zhang love $i "
    done
    
    for j in $@
    do      
            echo "ban zhang love $j"
    done
    
    [atguigu@hadoop101 datas]$ bash for.sh cls xz bd
    ban zhang love cls 
    ban zhang love xz 
    ban zhang love bd 
    ban zhang love cls
    ban zhang love xz
    ban zhang love bd

    (b)当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数

    [atguigu@hadoop101 datas]$ vim for.sh
    
    #!/bin/bash 
    
    for i in "$*" 
    #$*中的所有参数看成是一个整体,所以这个for循环只会循环一次 
            do 
                    echo "ban zhang love $i"
            done 
    
    for j in "$@" 
    #$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次 
            do 
                    echo "ban zhang love $j" 
    done
    
    [atguigu@hadoop101 datas]$ chmod 777 for.sh
    [atguigu@hadoop101 datas]$ bash for.sh cls xz bd
    ban zhang love cls xz bd
    ban zhang love cls
    ban zhang love xz
    ban zhang love bd

    7.4 while 循环

    1.基本语法

    while [ 条件判断式 ]

      do

        程序

      done

    2.案例实操

    1)从1加到100

    [atguigu@hadoop101 datas]$ touch while.sh
    [atguigu@hadoop101 datas]$ vim while.sh
    
    #!/bin/bash
    s=0
    i=1
    while [ $i -le 100 ]
    do
            s=$[$s+$i]
            i=$[$i+1]
    done
    
    echo $s
    
    [atguigu@hadoop101 datas]$ chmod 777 while.sh 
    [atguigu@hadoop101 datas]$ ./while.sh 
    5050
  • 相关阅读:
    MFC 中 Tooltip 实现的几种方式
    C++11带来的优雅语法
    socket异步编程--libevent的使用
    单元测试与解耦
    Ubuntu(Linux) + mono + jexus +asp.net MVC3
    常见算法总结
    NET里简易实现AOP
    KMP算法
    简易的集群通讯组件
    数据访问层的封装与抽象
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/13219664.html
Copyright © 2020-2023  润新知