zoukankan      html  css  js  c++  java
  • 十三、Shell之select语句

    一、select介绍

    select循环语句的主要作用可能就是创建菜单,在执行带select循环语句的脚本时,输出会按照数字顺序的列表显示一个菜单项,并显示提示符(默认是#?),同时等待用户输入数字进行选择。

    二、select语法格式

    select 变量名 [in 菜单取值列表]
    do
       命令集
    done
    
         在这种select循环语句的语法中,在执行脚本后,select关键字后面会有一个“变量名”,变量名依次获取in关键字后面的变量取值列表内容(以空格分隔),每次仅取一个,然后进入循环(do和done之间),执行循环内的所有指令,当执行到done时结束返回,之后,“变量名”再继续取变量列表里的下一个变量值,继续执行循环内的所有指令(do和done之间的指令),当执行到done时结束返回,以此类推,直到取完最后一个变量列表里的值并进入循环执行到done结束为止。与for循环不同的是,select循环执行后会出现菜单项等待用户选择(不会自动循环所有变量列表),而用户输入的只能是菜单项前面的数字序号,每输入一次对应的序号就会执行一次循环,直到变量后面对应列表取完为止。

    三、select的逻辑结构图

    四、用select循环打印简单菜单项的多种实现方法

    方案1:直接使用列表字符串

    #! /bin/bash
    select name in ywx kaka king
    do
      echo $name
    done
    
    [root@node1 scripts]# sh select1.sh 
    1) ywx
    2) kaka
    3) king
    #? 1
    ywx
    #? 2
    kaka
    #? 3
    king
    #? 

    方案2:采用数组做变量列表

    #! /bin/bash
    array=(ywx kaka king)
    select name in "${array[@]}"
    do
      echo $name
    done
    
    [root@node1 scripts]# sh select1.sh 
    1) ywx
    2) kaka
    3) king
    #? 1
    ywx
    #? 2
    kaka
    #? 3
    king
    #? 

    方案3:把命令结果作为变量列表

    [root@node1 scripts]# ls /tmp
    501.html  502.html  503.html  king1.bin  king2.bin  king3.bin  king4.bin  king5.bin  king6.bin
    
    [root@node1 scripts]#cat /scripts/select1.sh
    #! /bin/bash
    select filename in $(ls /tmp)
    do
      echo $filename
    done
    
    [root@node1 scripts]# sh select1.sh 
    1) 501.html   3) 503.html   5) king2.bin  7) king4.bin    9) king6.bin
    2) 502.html   4) king1.bin  6) king3.bin  8) king5.bin
    #? 1
    501.html
    #? 2
    502.html
    #? 3
    503.html
    #? 

    五、调整select循环菜单项的默认提示符及利用select变量打印数字序号

    [root@node1 scripts]# cat select1.sh
    #! /bin/bash
    PS3="please select a num from menu:"     #<== PS3就是控制select循环的提示符,
    select filename in $(ls /tmp)
    do
        echo -e "I guess you selected the menu is:
     $REPLY) $filename"  #<==REPLY变量就是菜单项对应的数字。
    done
    
    [root@node1 scripts]# sh select1.sh 
    1) 501.html   3) 503.html   5) king2.bin  7) king4.bin    9) king6.bin
    2) 502.html   4) king1.bin  6) king3.bin  8) king5.bin
    please select a num from menu:1
    I guess you selected the menu is:
     1) 501.html
    please select a num from menu:2
    I guess you selected the menu is:
     2) 502.html
    please select a num from menu:
    I have a dream so I study hard!!!
  • 相关阅读:
    为mongoDB加用户权限管理
    手机号归属地查询接口
    关于微信小程序
    linux交互执行命令,expect
    apache配置跨域请求代理
    Linux(Mac)常用命令
    解决:配置虚拟主机,重启apache,[warn] _default_ VirtualHost overlap on port 80, the first has precedence
    linux下grep分析apache日志的命令集合
    解决Macbook Pro蓝牙不可用问题
    Apache如何开启Gzip压缩
  • 原文地址:https://www.cnblogs.com/yaokaka/p/13816397.html
Copyright © 2011-2022 走看看