• Shell之循环控制


    条件判断:if语句

    if [ expression ]
      then
      command;  
    fi

    注意:expression 和方括号[ ]之间必须有空格,否则会有语法错误
     其他格式:
      if ... else ... fi 语句
      if ... elif ... else ... fi 语句
     
     eg:

      root@wdev02:/usr/local/shell# cat if.sh
        #!/bin/bash
        read num
        if [ $num -eq 10 ]
        then
        echo "输入ok"
        else
        echo "输入错误"
        fi
      root@wdev02:/usr/local/shell# sh if.sh
        10
        输入ok

    分支控制:case语句

      case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构。

    语法结构:
      case $变量 in
        值1)
          执行动作1;;
    值2)
          执行动作2;;
    *)
          执行默认动作;
       esac

    eg:由用户从键盘输入一个字符,并判断该字符是否为字母、数字或者其他字符, 并输出相应的提示信息

      root@dev02:/usr/local/shell# cat case.sh
      #!/bin/bash
       read -p "press some key ,then press return :" KEY
      case $KEY in
        [a-z]|[A-Z])
          echo "It's a letter.";;
         [0-9])
          echo "It's a digit.";;
        *)
          echo "It's function keys、Spacebar or other ksys."
      esac
      root@dev02:/usr/local/shell# bash case.sh
      press some key ,then press return :1
      It's a digit.

    循环控制:for语句

    #!第一种写法 类似C、Java
    for ((i=1; i<=100; i ++))
    do
      echo $i  
    done
    注意:从 ubuntu 6.10 开始,ubuntu 就将先前默认的bash shell 更换成了dash shell;其表现为 /bin/sh 链接倒了/bin/dash而不是传统的/bin/bash
    解决办法:直接使用bash

    eg:

      root@dev02:/usr/local/shell# cat for.sh
        #!/bin/bash
        for((i=1;i<=5;i++));
        do
          echo $(expr $i * 3 + 1);
        done
      root@dev02:/usr/local/shell# bash for.sh
        4
        7
        10
        13
        16

    #!第二种写法 in应用
    for i in {1..100} 
    do 
      echo $i 
    done 
    #!第三种写法 seq 使用 for i in `seq 1 100` do echo $i done

    循环控制:while语句

    while [ 条件判断式 ]
        do
            执行动作
        down

    eg:利用while循环打印一个5x5的*

      root@dev02:/usr/local/shell$ cat while.sh
        #!/bin/bash
        i=1
        j=1
        while [ $i -le 5 ]
          do
            while [ $j -le 5 ]
              do
                echo -n "* "
                j=$(($j + 1))
              done
              echo
            i=$(($i + 1))
            j=1

          done
      root@dev02:/usr/local/shell$ sh while.sh
        * * * * *
        * * * * *
        * * * * *
        * * * * *
        * * * * *

  • 相关阅读:
    多态中的虚析构函数
    mysql-2-where
    mysql-1-select
    高维稀疏数据的异常检测
    隐马尔可夫模型 Hidden Markov Model
    协同过滤 Collaborative Filtering
    内容推荐
    推荐系统中的基本问题
    HDR视频生态圈追踪
    从强提醒说起——社交场景下的万有“隐力”
  • 原文地址:https://www.cnblogs.com/ryjJava/p/12483949.html
Copyright © 2020-2023  润新知