Linuxwilliam hill官网
直播中

慧心的眼眸

6年用户 631经验值
私信 关注
[经验]

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学习交流群:690327559

更多回帖

发帖
×
20
完善资料,
赚取积分