“算命大师”脚本

算命大师

Shell脚本编写

  编写程序如下:

#!/bin/bash
echo "------算命大师------"
zodiac=("鼠" "牛" "虎" "兔" "龙" "蛇" "马" "羊" "猴" "鸡" "狗" "猪")
constellation=("水瓶座" "双鱼座" "白羊座" "金牛座" "双子座" "巨蟹座" "狮子座" "处女座" "天秤座" "天蝎座" "射手座" "摩羯座")
mark=(20 19 21 20 21 22 23 23 23 24 23 22)

while true
do
	echo ""
	read -p "请输入你的生日(YYYY-MM-DD): " birthday
	
	# quit
	if [[ ${birthday} == "quit" || ${birthday} == "q" ]]
	then
		break
	fi

	# 检查输入是否正确
	if [[ ${#birthday} -ne 10  ||  ${birthday:4:1} != "-"  ||  ${birthday:7:1} != "-" ]]
	then
		echo "输入格式错误哦!"
		continue
	fi
	# 此处日期判断方法写法参考:https://www.cnblogs.com/guotianqi/p/7520026.html
	if echo ${birthday} | grep -q -E "[0-9]{4}-[0-9]{2}-[0-9]{2}" && \
	   date -d $birthday +%Y%m%d > /dev/null 2>&1
	then :
	else
		echo "输入日期非法!"
		continue
	fi
	
	# 提取年月日信息
	year=${birthday:0:4}
	month=${birthday:5:2}
	day=${birthday:8:2}

	# 计算属相 
	zodiac_index=(year-4)%12  # 公元4年为鼠年
	echo "属相: "${zodiac[zodiac_index]}

	# 计算星座
	if [ ${day} -gt ${mark[month]} ]
	then
		constellation_index=(month-1)%12
	else 
		constellation_index=(month-2)%12
	fi
	echo "星座: "${constellation[constellation_index]}
done

测试

  使用bash ./fate.sh运行该脚本,对各类情况进行测试,如下:
“算命大师”脚本
  观察到该脚本成功运行,并正确输出属相及星座信息。

NOTE

  脚本语言中“[[ ]]”与“[]”的区别,由于“-”符号的特殊性,在使用“[ ]”指定if语句command部分时会导致错误的发生,因此使用更完善和强大的“[[ ]]”来进行检测可避免该错误的出现。
  对于日期是否非法的检测比较精巧,值得推敲。

上一篇:模块五阶段一 后台系统搭建


下一篇:对象下—练习3