Shell中case...in分支語句的應(yīng)用
Shell編程中的case…in語句:
偽代碼表示:
case $變量 in 選項1) 分支1 ;; 選項2) 分支1 ;; 選項3) 分支1 ;; . . . 選項n) 分支n ;; *) 其它 ;; esac
- 特別注意:
- 1.
case
后,要寫變量值
; - 2.選項
即變量值
的可能結(jié)果; - 3.
符號*
表示其它的選項,等價于C語言switch…case分支語句中的default關(guān)鍵字
; - 4.
符號;;
等價于C語言switch…case分支語句中的break關(guān)鍵字
;
case…in語句選項的分類:
- 1.只有
一個
字符串; - 2.
多個
字符串; - 3.通配
0至9
的任意字符; - 4.通配
26個英文大寫或小寫字母
,需要配合本地語序
使用; - 5.通配
除了特定字符
的其他字符,和C語言
中按位異或符號
一樣,都是^
;
實例要求:
從終端輸入年份和月份,判斷月份的天數(shù)。
- 一年有12個月,其中1,3,5,7,8,10,12為最多天數(shù)的月份,共有31天,4,6,9,11月份的天數(shù)相同,共有30天,剩下的2月份,在閏年時為29天,在平年時為28天。
- 思路1:先使用if...else條件語句判斷用戶輸入的年份是閏年還是平年,再使用switch...case分支語句依次輸出用戶輸入月份的天數(shù)。
- 思路2:先使用switch...case分支語句,其中除了2月份,其他月份的天數(shù)可以直接輸出,若用戶在終端輸入的月份是2月,嵌套if...else條件語句判斷用戶輸入的年份是閏年還是平年,并根據(jù)實際情況輸出天數(shù)。
#include<stdio.h> int main(int argc, const char *argv[]) { int year, month; printf("請輸入年份和月份 > "); scanf("%d%d", &year, &month); if (year < 0) { puts("輸入的年份錯誤"); return -1; } if (month < 1 || month > 12) { puts("輸入的月份錯誤"); return -2; } /* //思路1: if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) { switch(month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf("%d年%d月份,共計31天\n", year, month); break; case 2: printf("%d年%d月份,共計29天\n", year, month); break; case 4: case 6: case 9: case 11: printf("%d年%d月份,共計30天\n", year, month); break; default: printf("輸入月份不合理\n"); break; } } else { switch(month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf("%d年%d月份,共計31天\n", year, month); break; case 2: printf("%d年%d月份,共計28天\n", year, month); break; case 4: case 6: case 9: case 11: printf("%d年%d月份,共計30天\n", year, month); break; default: printf("輸入月份不合理\n"); break; } } */ //思路2: switch(month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf("%d年%d月份,共計31天\n", year, month); break; case 2: if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) { printf("%d年%d月份,共計29天\n", year, month); } else { printf("%d年%d月份,共計28天\n", year, month); } break; case 4: case 6: case 9: case 11: printf("%d年%d月份,共計30天\n", year, month); break; default: printf("輸入月份不合理\n"); break; } return 0; }
- 測試代碼:
#!/bin/bash read -p "請輸入查詢的年份>>" Y read -p "請輸入查詢的月份>>" M if [ $Y -lt 0 ] then echo "輸入的年份有誤,請重新輸入?。?!" exit fi if [ $M -lt 1 -o $M -gt 12 ] then echo "輸入的月份有誤,請重新輸入?。?!" exit fi case $M in 4) echo "$Y年$M月共有30天" ;; 6) echo "$Y年$M月共有30天" ;; 9) echo "$Y年$M月共有30天" ;; 11) echo "$Y年$M月共有30天" ;; 2) if [ $((Y%4)) -eq 0 -a $((Y%100)) -ne 0 ] || [ $((Y%400)) -eq 0 ] then echo "$Y年$M月共有29天" else echo "$Y年$M月共有28天" fi ;; *) echo "$Y年$M月共有31天" ;; esac
- 運行結(jié)果:
#第一次運行
請輸入查詢的年份>>2000
請輸入查詢的月份>>2
2000年2月共有29天
#第二次運行
請輸入查詢的年份>>2013
請輸入查詢的月份>>2
2013年2月共有28天
#第三次運行
請輸入查詢的年份>>-1999
請輸入查詢的月份>>11
輸入的年份有誤,請重新輸入?。?!
#第四次運行
請輸入查詢的年份>>2001
請輸入查詢的月份>>13
輸入的月份有誤,請重新輸入?。?!
#第五次運行
請輸入查詢的年份>>2023
請輸入查詢的月份>>8
2023年8月共有31天
#第六次運行
請輸入查詢的年份>>2023
請輸入查詢的月份>>9
2023年9月共有30天
到此這篇關(guān)于Shell中case...in分支語句的應(yīng)用的文章就介紹到這了,更多相關(guān)Shell case...in分支語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux定時執(zhí)行任務(wù)at和crontab命令詳解
本篇文章主要介紹了Linux定時執(zhí)行任務(wù)at和crontab命令這兩個命令的基本用法和區(qū)別,一起學(xué)習下。2017-11-11