shell 用case...in写一个从终端输入年份和月份,判断月份对应的天数
时间: 2024-05-14 18:13:49 浏览: 121
好的,我来回答你的问题。
以下是一个用case...in语句写的脚本,用于判断输入的年份和月份对应的天数:
```
#!/bin/bash
echo "请输入年份(四位数):"
read year
echo "请输入月份(01-12):"
read month
case $month in
01|03|05|07|08|10|12)
days=31
;;
04|06|09|11)
days=30
;;
02)
if [ $((year % 4)) -eq 0 ] && [ $((year % 100)) -ne 0 ] || [ $((year % 400)) -eq 0 ]
then
days=29
else
days=28
fi
;;
*)
echo "错误的月份格式。"
exit 1
;;
esac
echo "$year 年 $month 月有 $days 天。"
```
以上脚本首先提示用户输入年份和月份,然后通过case...in语句判断输入的月份对应的天数。对于大月份(即31天的月份),直接赋值为31;对于小月份(即30天的月份),直接赋值为30;对于二月份,需要判断是否是闰年,然后赋值为29或28;对于输入错误的月份,输出错误信息并退出脚本。最后输出输入的年份和月份对应的天数。
相关问题
Shell编程,以函数的形式实现月份的显示,函数的作用是:在用户传送一个月份数字之后显示英文字符串形式的月份(或一条错误信息)并显示月份对应的天数。注意“平年”与“闰年”2月份天数的不同
以下是我AI模型的回答:
可以使用以下Shell函数来实现月份的显示:
```shell
#!/bin/bash
function month() {
case $1 in
1) echo "January, 31 days";;
2)
if [ $(($2 % 4)) -eq ] && [ $(($2 % 100)) -ne ] || [ $(($2 % 400)) -eq ]
then
echo "February, 29 days (leap year)"
else
echo "February, 28 days (common year)"
fi;;
3) echo "March, 31 days";;
4) echo "April, 30 days";;
5) echo "May, 31 days";;
6) echo "June, 30 days";;
7) echo "July, 31 days";;
8) echo "August, 31 days";;
9) echo "September, 30 days";;
10) echo "October, 31 days";;
11) echo "November, 30 days";;
12) echo "December, 31 days";;
*) echo "Invalid month number";;
esac
}
month $1 $2
```
该函数使用了Shell的case语句来判断输入的月份,并根据月份的不同输出对应的英文字符串形式的月份和天数。对于2月份,还需要判断是否为闰年,根据闰年的规则来输出对应的天数。如果输入的月份不在1-12的范围内,则输出一条错误信息。
使用该函数的方法是在Shell中调用该函数并传入一个月份数字和一个年份,例如:
```shell
$ ./month.sh 2 202
February, 29 days (leap year)
```
这将输出202年2月份的英文字符串形式和天数。
阅读全文