OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4175|回复: 0

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

[复制链接]

132

主题

340

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1036
金钱
1036
注册时间
2017-10-30
在线时间
163 小时
发表于 2018-9-7 16:31:46 | 显示全部楼层 |阅读模式
  一、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
linux免费学习课程  :
linux基础
http://www.makeru.com.cn/course/details/2058?s=26056
C高级之linux
http://www.makeru.com.cn/course/details/2478?s=26056
linux多线程编程
http://www.makeru.com.cn/course/details/1937?s=26056


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表