一、case语句
case语句实现一种分支结构,语法如下:
caseexpr 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
二、select语句
select语句实现一种菜单循环结构,其语法如下所示:
select variable in List #将列表中的每一个菜单项之前添加一个从1开始的序号依次呈现给用户
#显示环境变量PS3的值(其中存放了引导用户输入的提示信息),让用户选择菜单项
#用户选择的菜单序号存在变量RELAY中,对应的List菜单项内容存在variable变量中
do #用户选择了一个菜单项之后进入循环体
#执行语句块commands
done #本次循环结束,重新进入下一次菜单选择循环
说明:
1、List列表的菜单项间隔符由环境变量IFS决定
2、按数值循环排列的菜单项会显示到标准错误输出(默认为显示器)
3、用户之间按键重新显示菜单
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
执行效果如下:
使用举例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
使用效果如下