第二十六章 流程控制: case分支

第二十六章 流程控制: case分支

很多编程语言都提供了专门处理多重选择的流程控制机制,Shell也是如此,其它编程语言拥有switch-case语句,而Shell中拥有case语句。

case命令

在Bash中,多重选择复合命令是case,其用法如下:

case word in
	[pattern [| pattern]...) commands ;;]...
esac

其中pattern是模式,当word和模式匹配按照先后顺序,只执行第一个匹配到的模式的commands。

case模式示例

模式 描述
a) 如果word是a,则匹配
[[:alpha]]) 如果word是单个字母,则匹配
???) 如果word是3个字符,则匹配
*.txt) 如果word是以.txt结尾,则匹配
*) 不管word是什么内容,均可匹配。将该模式作为case命令最后一个模式是一种不错的做法,可以匹配之前模式无法匹配的内容。

例如:

#!/bin/bash

read -p "enter word > "

case "$REPLY" in
    [[:alpha:]]) echo "is a single alphabetic character." ;;
	[ABC][0-9])  echo "is A, B, or C followed by a digit." ;;
	???)         echo "is three characters long." ;;
	*.txt)       echo "is a word ending in '.txt'" ;;
	*)           echo "is something else." ;;
esac

也可以使用分割符,将多个模式组合在一起,形成“逻辑或”(or)关系的条件模式。这在同时处理大小写字母时很有用,例如:

#!/bin/bash

clear
echo "
Please Select:

A. Display System Information
B. Display Disk Space
C. Display Home Space Utilization
Q. Quit
"
read -p "Enter selection [A, B, C or Q] >"

case "$REPLY" in
     q|Q)  echo "Program terminated."
	 	   exit
		   ;;
	 a|A)  echo "Hostname: $HOSTNAME"
	 	   uptime
		   ;;
	 b|B)  df -h
	       ;;
	 c|C) if [[ "$(id -u)" -eq 0 ]]; then
	          echo "Home Space Utilization (All users)"
			  du -sh /home/*
		  else
		      echo "Home Space Utilization ($USER)"
			  du -sh "$HOME"
		  fi
		  ;;
	 *)   echo "Invalid entry" >&2
	      exit 1
		  ;;
esac


执行多次操作

在Bash4.0之前,case无法匹配多个分支。现代版本Bash添加了;;&语法,允许继续测试下一个模式。

例如:

#!/bin/bash

#case4-2: 测试一个字符

read -n 1 -p "Type a character >"
echo
case "$REPLY" in
	[[:upper:]]) echo "'$REPLY' is upper case." ;;&
	[[:lower:]]) echo "'$REPLY' is lower case." ;;&
	[[:alpha:]]) echo "'$REPLY' is aphabetic."  ;;&
	[[:digit:]]) echo "'$REPLY' is a digit."    ;;&
	[[:graph:]]) echo "'$REPLY' is a visible character." ;;&
	[[:punct:]]) echo "'$REPLY' is a punctuation symbol." ;;&
	[[:space:]]) echo "'$REPLY' is awhitespace character." ;;&
esac

运行结果如下:

第二十六章 流程控制: case分支_第1张图片

你可能感兴趣的:(Linux命令行大全笔记,linux)