Shell中case...in分支语句的应用

 更新时间:2023年08月21日 15:55:09   作者:李十五哥  
shell作为一种脚本编程语言,同样包含循环、分支等其他程序控制结构,从而轻松完成更加复杂、强大的功能,本文主要介绍了Shell中case...in分支语句的应用,感兴趣的可以了解一下

Shell编程中的case…in语句:

伪代码表示:

case $变量 in
     选项1)
         分支1
         ;;
     选项2)
         分支1
         ;;
     选项3)
         分支1
         ;;
         .
         .
         .
     选项n)
         分支n
         ;;
     *)
         其它
         ;;
esac   
  • 特别注意:
  • 1.case后,要写变量值
  • 2.选项即变量值的可能结果;
  • 3.符号*表示其它的选项,等价于C语言switch…case分支语句中的default关键字;
  • 4.符号;;等价于C语言switch…case分支语句中的break关键字

case…in语句选项的分类:

  • 1.只有一个字符串;
  • 2.多个字符串;
  • 3.通配0至9的任意字符;
  • 4.通配26个英文大写或小写字母,需要配合本地语序使用;
  • 5.通配除了特定字符的其他字符,和C语言按位异或符号一样,都是^;

实例要求:

从终端输入年份和月份,判断月份的天数。 

  • 一年有12个月,其中1,3,5,7,8,10,12为最多天数的月份,共有31天,4,6,9,11月份的天数相同,共有30天,剩下的2月份,在闰年时为29天,在平年时为28天。
  • 思路1:先使用if...else条件语句判断用户输入的年份是闰年还是平年,再使用switch...case分支语句依次输出用户输入月份的天数。
  • 思路2:先使用switch...case分支语句,其中除了2月份,其他月份的天数可以直接输出,若用户在终端输入的月份是2月,嵌套if...else条件语句判断用户输入的年份是闰年还是平年,并根据实际情况输出天数。
#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
  • 运行结果:

#第一次运行
请输入查询的年份>>2000
请输入查询的月份>>2
2000年2月共有29天
#第二次运行
请输入查询的年份>>2013
请输入查询的月份>>2
2013年2月共有28天
#第三次运行
请输入查询的年份>>-1999
请输入查询的月份>>11
输入的年份有误,请重新输入!!!
#第四次运行
请输入查询的年份>>2001
请输入查询的月份>>13
输入的月份有误,请重新输入!!!
#第五次运行
请输入查询的年份>>2023
请输入查询的月份>>8
2023年8月共有31天
#第六次运行
请输入查询的年份>>2023
请输入查询的月份>>9
2023年9月共有30天

到此这篇关于Shell中case...in分支语句的应用的文章就介绍到这了,更多相关Shell case...in分支语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux下使用Shell脚本获取终端宽度的解决方法

    Linux下使用Shell脚本获取终端宽度的解决方法

    这篇文章主要介绍了Linux下使用Shell脚本获取终端宽度的解决方法,需要的朋友可以参考下
    2018-11-11
  • Shell脚本实现的阳历转农历代码分享

    Shell脚本实现的阳历转农历代码分享

    这篇文章主要介绍了Shell脚本实现的阳历转农历代码分享,本文是作者一个星期的工作成果,得来不易,需要的朋友可以参考下
    2014-09-09
  • Linux下使用expect命令编写自动化交互脚本

    Linux下使用expect命令编写自动化交互脚本

    今天小编就为大家分享一篇关于Linux下使用expect命令编写自动化交互脚本,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-11-11
  • Linux查看端口占用lsof -i:port的方法

    Linux查看端口占用lsof -i:port的方法

    下面小编就为大家带来一篇Linux查看端口占用lsof -i:port的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • shell 操作钉钉机器人实现告警提醒的方法

    shell 操作钉钉机器人实现告警提醒的方法

    这篇文章主要介绍了shell 操作钉钉机器人实现告警提醒的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Linux中多命令执行'';''和''&&''的区别解释

    Linux中多命令执行'';''和''&&''的区别解释

    大家有没有发现在 Linux 中经常使用到一个命令,如 make && make install,这里也可以使用 make ; make install,那么在 Linux 中执行命令 ; 和 && 有何区别?下面通过这篇文章来给大家详细的介绍下面,有需要的朋友们可以参考借鉴。
    2016-12-12
  • shell脚本实现mysql定时备份、删除、恢复功能

    shell脚本实现mysql定时备份、删除、恢复功能

    这篇文章主要介绍了shell脚本实现mysql定时备份、删除、恢复功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Linux实现彻底清理空文件夹的方法详解

    Linux实现彻底清理空文件夹的方法详解

    这篇文章主要介绍了Linux实现彻底删除指定路径下的所有空文件夹。这里的空文件夹的认定标准是:如果某个文件夹的子文件夹全是空文件夹,也认为该文件夹是空文件夹,需要的可以参考一下
    2022-10-10
  • 利用Shell脚本循环读取文件中每一行的方法详解

    利用Shell脚本循环读取文件中每一行的方法详解

    读取文件是我们在日常工作中经常遇到的一个需求,下面这篇文章主要给大家介绍了关于利用Shell脚本循环读取文件中每一行的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习下吧。
    2017-09-09
  • 详解linux less命令查看大文件

    详解linux less命令查看大文件

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。本文主要给大家介绍linux less命令查看大文件的相关知识,感兴趣的朋友一起看看吧
    2018-10-10

最新评论