本文是Linux Shell脚本系列教程的第(一)篇,更多shell教程请看:Linux Shell脚本系列教程 想要学习linux,shell知识必不可少,今天就给大家来简单介绍下shell的基本知识。 Shell简介 Shell自身是一个用C语言编写的程序,是用户来使用Unix或Linux的桥梁,用户的大部分工作都需要通过Shell来完成。只有熟练使用shell,才能熟练掌握linux。 可以说:Shell既是一种命令语言,又是一种程序设计语言。 作为命令语言,它可以交互式地解释和执行用户输入的命令;而作为程序设计语言,它可以定义各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。 Shell虽然不是Unix/Linux系统内核的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式来协调各个程序的运行。…
Linux Shell脚本入门教程系列之(十三)Shell分支语句case … esac教程
本文是Linux Shell脚本系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程
上一篇之后,分支语句非常实用,基本上高级语言都支持分支语句(python 没有),大多数都使用switch … case格式,但是在Shell却没有switch … case,不过别担心,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脚本系列教程
原文:Linux Shell系列教程之(十三)Shell分支语句case … esac教程
上一篇:Linux Shell脚本入门教程系列之(十二)Shell until循环
下一篇:Linux Shell脚本入门教程系列之(十四) Shell Select教程
本文:Linux Shell脚本入门教程系列之(十三)Shell分支语句case … esac教程