• shell中select、case的使用


    caseselect结构在技术上说并不是循环, 因为它们并不对可执行代码块进行迭代. 但是和循环相似的是, 它们也依靠在代码块顶部或底部的条件判断来决定程序的分支.

    select

      select结构是建立菜单的另一种工具, 这种结构是从ksh中引入的.

      select variable [in list]

        do 

        TT class="REPLACEABLE" >command... 
      break 
      done

    提示用户输入选择的内容(比如放在变量列表中). 注意: select命令使用PS3提示符, 默认为(#?), 当然, 这可以修改.

    #!/bin/bash
    
    PS3='Choose your favorite vegetable: ' # 设置提示符字串.
    
    echo
    
    select vegetable in "beans" "carrots" "potatoes" "onions" "rutabagas"
    do
      echo
      echo "Your favorite veggie is $vegetable."
      echo "Yuck!"
      echo
      break  # 如果这里没有 'break' 将不停循环进行选择
    done
    
    exit 0

      如果忽略了in list列表, 那么select命令将会使用传递到脚本的命令行参数($@), 或者是函数参数(当select是在函数中时).

      与忽略in list的 

      for variable [in list

      结构比较一下.

      例: 使用函数中的select结构来创建菜单

    #!/bin/bash
    
    PS3='Choose your favorite vegetable: '
    
    echo
    
    choice_of()
    {
    select vegetable
    # [in list]被忽略, 所以'select'使用传递给函数的参数.
    do
      echo
      echo "Your favorite veggie is $vegetable."
      echo "Yuck!"
      echo
      break
    done
    }
    
    choice_of beans rice carrots radishes tomatoes spinach
    #         $1    $2   $3      $4       $5       $6
    #         传递给choice_of()的参数
    
    exit 0

    case (in) / esac

    在shell中的case结构与C/C++中的switch结构是相同的. 它允许通过判断来选择代码块中多条路径中的一条. 它的作用和多个if/then/else语句的作用相同, 是它们的简化结构, 特别适用于创建菜单.

    case "$variable" in 
      "$condition1" )
      TT class="REPLACEABLE" >command... 
      ;;

      "$condition2" )
      TT class="REPLACEABLE" >command... 
      ;;
    esac

    例: 简单的字符串匹配

    #!/bin/bash
    # match-string.sh: 简单的字符串匹配
    
    match_string ()
    {
      MATCH=0
      NOMATCH=90
      PARAMS=2     # 此函数需要2个参数.
      BAD_PARAMS=91
    
      [ $# -eq $PARAMS ] || return $BAD_PARAMS
    
      case "$1" in
      "$2") return $MATCH;;
      *   ) return $NOMATCH;;
      esac
    
    }  
    
    
    a=one
    b=two
    c=three
    d=two
    
    
    match_string $a     # 参数个数错误.
    echo $?             # 91
    
    match_string $a $b  # 不匹配
    echo $?             # 90
    
    match_string $b $d  # 匹配
    echo $?             # 0
    
    
    exit 0    
  • 相关阅读:
    【AT1219】歴史の研究(回滚莫队模板)
    【洛谷4245】【模板】任意模数多项式乘法
    同余与逆元
    线性推逆元
    大整数类型!
    浅谈扩展欧几里得定理(附裴蜀定理)
    二进制串题解(国际考试备用题)
    String 的成员函数
    关于快速幂
    string的赋值
  • 原文地址:https://www.cnblogs.com/zx3212/p/9121166.html
Copyright © 2020-2023  润新知