Linux Shell系列教程之(十三)Shell分支语句case … esac教程

时间:2023-03-08 15:53:01
Linux Shell系列教程之(十三)Shell分支语句case … esac教程

本文是Linux Shell系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell系列教程

分支语句非常实用,基本上高级语言都支持分支语句(python 没有),大多数都使用switch ... case格式,但是在Shell却没有switch ... case,不过别担心,Shell是支持分支语句的,只不过使用case ... esac格式而已。二者在本质上是相同的。

Linux Shell系列教程之(十三)Shell分支语句case … esac教程

一、Shell分支语句case···esac语法

case 值 in
模式1)
command1
command2
command3
;;
模式2)
command1
command2
command3
;;
*)
command1
command2
command3
;;
esac

说明:case后为取值,值后为关键字 in,接下来是匹配的各种模式,每一模式最后必须以右括号结束。

值可以为变量或常数。

模式支持正则表达式,可以用以下字符:

*       任意字串
? 任意字元
[abc] a, b, 或c三字元其中之一
[a-n] 从a到n的任一字元
| 多重选择

匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。

;; 与其他语言中的 break 类似,意思是不执行接下来的语句而是跳到整个 case 语句的最后。

*)与default相似,如果上面没有匹配到的模式,则执行*)里的内容。

二、Shell分支语句case···esac使用举例

通过一个例子来学习下case…esac命令:

#!/bin/sh
#auther:linuxdaxue.com
#date:2016-05-30
case $1 in
start | begin)
echo "I am started!"
;;
stop | end)
echo "I am stopped!"
;;
*)
echo "Other command!"
;;
esac

说明:这个脚本练习的是模式匹配,模式匹配支持‘|’符,有一个条件符合就会执行命令。

输出:

$./test.sh start
I am started!
$./test.sh stop
I am stopped!
$./test.sh begin
I am started!
$/test.sh hello
Other command!

接下来给大家演示一个通过case…esac语句产生菜单的例子:

#!/bin/bash
#Author:linuxdaxue.com
#Date:2016-05-30
#Desc:Shell case菜单练习 clear # 清屏. echo " Contact List"
echo " ------- ----"
echo "Choose one of the following persons:"
echo
echo "[E]vans, Roland"
echo "[J]ones, Mildred"
echo "[S]mith, Julie"
echo "[Z]ane, Morris"
echo read person case "$person" in
# 注意, 变量是被""引用的. "E" | "e" )
# 接受大写或者小写输入.
echo
echo "Roland Evans"
echo "4321 Floppy Dr."
echo "Hardscrabble, CO 80753"
echo "(303) 734-9874"
echo "(303) 734-9892 fax"
echo "revans@zzy.net"
echo "Business partner & old friend"
;;
# 注意, 每个选项后边都要以双分号;;结尾. "J" | "j" )
echo
echo "Mildred Jones"
echo "249 E. 7th St., Apt. 19"
echo "New York, NY 10009"
echo "(212) 533-2814"
echo "(212) 533-9972 fax"
echo "milliej@loisaida.com"
echo "Ex-girlfriend"
echo "Birthday: Feb. 11"
;; # 后边的 Smith 和 Zane 的信息在这里就省略了. * )
# 默认选项.
# 空输入(敲回车RETURN), 也适用于这里.
echo
echo "Not yet in database."
;; esac echo # 练习:
# -----
# 修改这个脚本, 让它能够接受多个输入,
#+ 并且能够显示多个地址. exit 0

说明:这个例子主要为大家演示了如何用case…esac语句产生菜单,让大家可以更形象、灵活的来学习case…esac语句的用法。

输出:

Contact List
------- ----
Choose one of the following persons: [E]vans, Roland
[J]ones, Mildred
[S]mith, Julie
[Z]ane, Morris E Roland Evans
4321 Floppy Dr.
Hardscrabble, CO 80753
(303) 734-9874
(303) 734-9892 fax
revans@zzy.net
Business partner & old friend

上面是输入E参数的输出,输入S或者Z,则会输出如下:

Contact List
------- ----
Choose one of the following persons: [E]vans, Roland
[J]ones, Mildred
[S]mith, Julie
[Z]ane, Morris Z Not yet in database.

好了,关于Shell中分支语句case…esac的用法就先为大家介绍到这里,case…esac是一个非常强大的命令,大家可以用其来做非常多的事情,这篇文章仅仅只是入门作用,更多的需要大家在实际使用中多多尝试,多多练习。

更多Linux Shell教程请看:Linux Shell系列教程