• Shell流程控制


    一、if 判断

    1.基本语法

    if [ 条件判断式 ];then

      程序

    fi

    或者

    if [ 条件判断式 ]

      then

        程序

    elif [ 条件判断式 ]

           then

                  程序

    else

           程序

    fi

           注意事项:

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

    (2)if后要有空格

    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

    二、 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

    1

    三、 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

    四、 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

  • 相关阅读:
    Codeforces 741D 【Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths】
    Codeforces 235C 【Cyclical Quest】
    UOJ #62.【UR #5】怎样跑得更快
    luoguP3648 [APIO2014]序列分割
    luoguP4782 [模板]2-SAT问题
    原博客已废弃
    个数可变的参数收藏
    新的一年开始。
    文件上传下载总结
    模板模式学习(转)
  • 原文地址:https://www.cnblogs.com/yfb918/p/12461752.html
Copyright © 2020-2023  润新知