首页 > 解决方案 > 使用 bash 脚本的生肖计算器

问题描述

#!/usr/bin/bash
echo "This is a zodiac sign calculator"
echo "May i know your name"
read name
echo "May i know your month of birth"
read month
echo "May i know your date of birth"
read date

 if ([[ "$month" == "3" ] && [ "$date" -ge "21" ]] && [[ "$month" == "4" ] && [ "$date" -le "20" ]])
 then
   echo "Hi $name !!! Your Zodiac Sign is Aries!"

 elif ([[ "$month" == "4" ] && [ "$date" -ge "21" ]] && [[ "$month" == "5" ] && [ "$date" -le "21" ]])
 then
   echo "Hi $name !!! Your Zodiac sign is Taurus"

 elif ([[ "$month" == "5" ] && [ "$date" -ge "22" ]] && [[ "$month" == "6" ] && [ "$date" -le "22" ]])
 then
   echo "Hi $name !!! Your Zodiac sign is Gemini"

 elif ([[ "$month" == "6" ] && [ "$date" -ge "23" ]] && [[ "$month" == "7" ] && [ "$date" -le "23" ]])
 then
   echo "Hi $name !!! Your Zodiac is Cancer"

 elif ([[ "$month" == "7" ] && [ "$date" -ge "24" ]] && [[ "$month" == "8" ] && [ "$date" -le "23" ]])
 then
   echo "Hi $name !!! Your Zodiac sign is Leo"

 elif ([[ "$month" == "8" ] && [ "$date" -ge "24" ]] && [[ "$month" == "9" ] && [ "$date" -le "23" ]])
 then
   echo "Hi $name !!! Your Zodiac sign is Virgo"

 elif ([[ "$month" == "9" ] && [ "$date" -ge "24" ]] && [[ "$month" == "10" ] && [ "$date" -le "23" ]])
 then
   echo "Hi $name !!! Your Zodiac sign is Libra"

 elif ([[ "$month" == "10" ] && [ "$date" -ge "24" ]] && [[ "$month" == "11" ] && [ "$date" -le "22" ]])
 then
   echo "Hi $name !!! Your Zodiac sign is Scorpio"

 elif ([[ "$month" == "11" ] && [ "$date" -ge "24" ]] && [[ "$month" == "12" ] && [ "$date" -le "21" ]])
 then
   echo "Hi $name !!! Your Zodiac sign is Saguittarius"

 elif ([[ "$month" == "12" ] && [ "$date" -ge "22" ]] && [[ "$month" == "1" ] && [ "$date" -le "20" ]])
 then
   echo "Hi $name !!! Your Zodiac sign is Capricorn"
 elif ([[ "$month" == "1" ] && [ "$date" -ge "21" ]] && [[ "$month" == "2" ] && [ "$date" -le "19" ]])
 then
   echo "Hi $name !!! Your Zodiac sign is Aquarius"

 elif ([[ "$month" == "2" ] && [ "$date" -ge "20" ]] && [[ "$month" == "3" ] && [ "$date" -le "20" ]])
 then
   echo "Hi $name !!! Your Zodiac sign is Pieces"

 else
   echo "Incorrect Input!! Try Again!"
   fi

伙计们请帮助我,我被困在这里..每次都显示不正确的输入

标签: linuxbashshell

解决方案


我只收到语法错误。代替 ...

if ([[ "$month" = 1 ] && [ "$date" -le 2 ]]) # this is wrong

... 写 ...

if [[ "$month" = 1 ]] && [[ "$date" -le 2 ]]

...甚至更好...

if (( month == 1 && date <= 2 ))

如果您不确定,请通过https://www.shellcheck.net/运行您的代码。Shellcheck 指出问题并提出修复建议。

顺便说一句:有一个简单的技巧可以减少检查次数。如果您将月份和日期存储在具有格式的单个变量中MDD并且也elif明智地使用,那么monthdate < ...每个星座一个就足够了。以下代码将月份和日期存储在变量中monthday,同时确保日期前导零:

printf -v monthday '%d%02d' "$month" "$day"

推荐阅读