算命大师
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部分时会导致错误的发生,因此使用更完善和强大的“[[ ]]”来进行检测可避免该错误的出现。
对于日期是否非法的检测比较精巧,值得推敲。