linux-shell中case与select语句

一、case语句

case语句实现一种分支结构,语法如下:

case expr in                         #expr为表达式

parrern1)                             #若expr与pattern1匹配,注意括号

     commands1                   #执行语句块commands1

     ;;                                    #跳出case结构

parrern2)                             #若expr与pattern2匹配,注意括号

     commands2                   #执行语句块commands2

     ;;                                    #跳出case结构

    ''''                                    #可以有任意多个模式匹配块

*)                                        #若expr与上面的模式都不匹配

    commands                      #执行语句块commands

    ;;

esac                                    #case语句必须以esac终止


说明:

1、表达式expr按照顺序匹配每个模式,一旦有一个模式匹配成功,则执行该模式后面所有命令,然后退出case.

2、如果expr没有找到匹配模式,则执行默认值“*)”后面的命令块(类似于if语句中的else块);“*)”块可以不出现。

3、所给的匹配模式“pattrer?"中可以含有通配符和逻辑或“|”,

4、除非特殊需要,否则每个命令块的最后必须有一个双分号";;",可以独占一行,或者放在语句块最后一个命令的后面。


举例:根据选择显示不同的信息

#!bin/bash
#filename=what-lang-do-you-like.sh

echo "What is your preferred scriptiong language"
read -p "1)bash 2)perl 3)python 4)ruby:" lang
case $lang in
    1) echo "You secected bash"    ;;
    2) echo "You secected perl"    ;;
    3) echo "You secected python"    ;;
    4) echo "You secected ruby"    ;;
    *) echo "i do not konw!"    ;;
esac

image.png


二、select语句

select语句实现一种菜单循环结构,其语法如下所示:

select variable in List             #将列表中的每一个菜单项之前添加一个从1开始的序号依次呈现给用户

                                             #显示环境变量PS3的值(其中存放了引导用户输入的提示信息),让用户选择菜单项

                                             #用户选择的菜单序号存在变量RELAY中,对应的List菜单项内容存在variable变量中

do                                        #用户选择了一个菜单项之后进入循环体

    <commands>                   #执行语句块commands

done                                     #本次循环结束,重新进入下一次菜单选择循环


说明:

1、List列表的菜单项间隔符由环境变量IFS决定

2、按数值循环排列的菜单项会显示到标准错误输出(默认为显示器)

3、用户之间按<Enter>键重新显示菜单

4、与for循环类似,省略in list时等价于 in "$%*'

5、select语句是个无限循环,通常要配合case语句处理不同的的选单及退出。可以按ctrl+c退出循环,也可以在循环内用break命令退出循环或用exit命令终止脚本执行。


使用举例1,在select循环内根据菜单项的内容处理菜单

#!/bin/bash
#filename=what-lang-do-you-like_menu_select.sh
clear
PS3="What is your preferred scripting language?"
select s in bash perl python ruby '(quit)'
do
    case $s in
        bash|perl|python|ruby)    echo "You selected $s.";;
        '(quit)')                  break                ;;
               *)                 echo "You selected error,retry..." ;;
    esac
done

执行效果如下:

image.png


使用举例2,在select循环体内根据菜单项序号处理菜单。

#!/bin/bash
#filename=what-***-do-you-want.sh
clear
PS3="What ××× do you want?"
IFS="|"
***="IPsec ×××|SSL ×××|PPTP ×××|Quit"
software="libreswan open*** pptp"
select type in $***
do
    case $REPLY in
        1|2|3)    echo "You selected $type,please install\" $(echo $software|cut -d' ' -f $REPLY)\"." ;;
	    *)    exit ;;
    esac
done

使用效果如下

image.png






猜你喜欢

转载自blog.51cto.com/11555417/2165029
今日推荐