shell 中的 case 語句 (switch)

語法介紹

有點像是其他語言的switch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
case expression in
pattern1)
匹配 pattern1,就會執行語句
;;
pattern2)
匹配 pattern2,就會執行語句
;;
pattern3)
匹配 pattern3,就會執行語句
;;
……
*)
default,預設都不匹配所有pattern時,預設執行的語句
esac
  • 每個pattern後面接 ) , 只要符合該pattern,就會執行後面對應的語句

  • ;; 相當於 break

  • * 相當於 default

  • expression 可以是一個變數,或是某個指令執行的結果

  • pattern 可以是數字、字串,也可以使用正則表達式

範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
printf "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

配合正則表達式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
printf "Input a character: "
read -n 1 char
case $char in
[a-zA-Z])
printf "\nletter\n"
;;
[0-9])
printf "\nDigit\n"
;;
[0-9])
printf "\nDigit\n"
;;
[,.?!])
printf "\nPunctuation\n"
;;
*)
printf "\nerror\n"
esac

參考

Shell case in语句详解


shell 中的 case 語句 (switch)
https://austin72905.github.io/2023/11/27/linux-shell-case/
作者
Austin Lin
發布於
2023年11月27日
許可協議