shell中的case in語句

1. case in 的用法

和其它編程語言類似,Shell也支持兩種分支結構(選擇結構),分別是if else 語句和 case in 語句。

格式:

case expression in
	pattern 1)
		statement1
		;;
	pattern 2)
		statement2
		;;
……
	*)
		statementn
esac	

其中:case in 和esac都是shell關鍵字,expression表示表達式,pattern表示匹配模式
expression既可以是一個變量、一個數字、一個字符串,也可以是一個數學計算表達式或者命令的執行結果只要能夠得到expression的值就可以。
pattern可以是一個數字、一個字符串、甚至是一個簡單的正則表達式

執行過程:

  • case會將expression的值與pattern1、pattern2等逐個進行匹配
  • 如果expression和某個模式匹配成功,就會執行這個模式後面對應的所有語句(該語句可以有一條,也可以有多條),直到遇見雙分號;;才停止,然後整個case語句就執行完畢,跳出case語句,執行esac後面的其他語句
  • 如果expression沒有匹配到任何一個模式,那麼就執行 * )後面的語句 ( * 表示其他所有值),直到遇見雙分號;;或者esac才結束。* )相當於多個if的分支語句中最後的else部分

對*) 的說明:

  1. case in語句中的*)用來“託底”,萬一expression沒有匹配到任何一個模式,*)部分可以做一些“善後”工作,或者給用戶一些提示
  2. 可以沒有*)部分,如果expression沒有匹配到任何一個模式,就不執行任何操作
  3. 除了最後一個分支外(可以是普通分支,也可以是*)分支),其他的分支都必須以;;結尾,;;代表一個分支的結束,不寫的話會有語法錯誤。最後一個分支可以寫;;,也可以不寫。因爲無論如何,執行到esac都會結束整個case in語句

例:

#!/bin/bash
echo "Input integer number"
read num

case $num in
	1)
	  echo "Monday"
	;;
	2)
	  echo "Tuesday"
	;;
	3)
	  echo "Wednesday"
	;;
	4)
	  echo "Thursday"
	;;
	5)
	  echo "Friday"
	;;
	6)
	  echo "Saturday"
	;;
	7)
	  echo "Sunday"
	;;
	*)
	  echo "error"
esac

在這裏插入圖片描述

2. case in 和正則表達式

case in 的pattern部分支持簡單的正則表達式,具體來說,可以使用以下幾種格式:

格式 說明
* 表示任意字符串
[abc] 表示a、b、c三個字符中的任意一個
[15ZH] 表示1、5、Z、H四個字符串中的任意一個
[m-n] 表示從m到n的任意一個字符
[0-9] 表示0-9的任意一個數字
[0-9a-zA-Z] 表示任意數字或字母
| 表示多重選擇,類似邏輯運算中的或運算
abc|xyz 表示匹配字符串“abc”或者“xyz”

例:

#!/bin/bash

echo "Input a character: "
read -n 1 char
# 如果此處需要用echo輸出的話就不能用read -n 1 因爲沒有用戶輸入數據完成後是沒有換行符的
# -n 1 表示只讀取一個字符,運行腳本後 只要用戶輸入一個字符 立即讀取結束 不用等用戶按下回車鍵
# 解決方法:在echo語句中手動添加換行符
case $char in
	[a-zA-Z])
	echo -e "\nletter"
	;;
	[0-9])
	echo -e "\nDigit"
	;;
	[.,?!])
	echo -e "\nPunctuation"
	;;
	*)
	echo -e "\nerror"
esac

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章