我用于检查闰年的shell脚本显示错误

3okqufwl  于 2022-12-19  发布在  Shell
关注(0)|答案(7)|浏览(154)
#!/bin/bash

echo "Enter the year (YYYY)"
read year

if[ $((year % 4)) -eq 0] 
then
  if[ $((year % 100)) -eq 0] 
    then
    if[ $((year % 400)) -eq 0] 
          then 
        echo "its a leap year"
    else
           echo "its not a leap year"
    fi
  else
  echo "Its not a leap year"
  fi
else
 echo "its not a leap year"

fi

它在第7行显示错误,并且在

[ $((year % 4)) -eq 0]
prdp8dxp

prdp8dxp1#

你把它弄得太复杂了。使用以下代码计算闰年:

isleap() { 
   year=$1
   (( !(year % 4) && ( year % 100 || !(year % 400) ) )) &&
      echo "leap year" || echo "not a leap"
}

测试它:

$ isleap 1900
not a leap
$ isleap 2000
leap year
$ isleap 2016
leap year
$ isleap 1800
not a leap
$ isleap 1600
leap year
rwqw0loc

rwqw0loc2#

你错过了一些空白,这是必要的bash:

echo "Enter the year (YYYY)"
read year

if [ $((year % 4)) -eq 0 ]
then
  if [ $((year % 100)) -eq 0 ]
    then
    if [ $((year % 400)) -eq 0 ]
          then
        echo "its a leap year"
    else
           echo "its not a leap year"
    fi
  else
  echo "Its a leap year"
  fi
else
 echo "its not a leap year"

fi
e5njpo68

e5njpo683#

测试此代码:

#!/bin/bash

echo "Enter a year to check - "

read y

year=$y 

ans=`expr $year % 4`

if [ $ans -eq 0 ]

then    

    echo "Leap Year"

else

    echo "Not a Leap Year"

fi
whlutmcx

whlutmcx4#

我喜欢一行程序,因为我需要编写很多脚本,下面是awk的解决方案和测试代码:

!/bin/csh -f

设定年份=“1898 1899 1900 1901 1902 1903 1904 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2016”
foreach year($年)echo -n“$年“echo $年|awk '{如果(($1%4)!=0){ly=0}否则{如果(($1%400)==0){ly=1}否则{如果(($1%100)==0){ly=0}否则{ly=1}}} END{如果(ly){打印“是”}否则{打印“否”}}' end
逻辑在本页的其他地方

im9ewurl

im9ewurl5#

您也可以使用此选项

if [[ $(( y % 4 )) = 0 && $(( y % 400 )) = 0 || $(( y % 100)) != 0 ]]

0lvr5msh

0lvr5msh6#

!/bin/bash

echo“输入年份(YYYY)”
读年
如果[ $((年%4))-等式0 ]
那么
如果[ $((年%100))-等式0 ]

then

if [ $((year%400)) -eq 0 ]

      then

    echo "its a leap year"

else

       echo "its not a leap year"

fi

否则
echo“今年是闰年”

否则
呼应“不是闰年”

vsmadaxz

vsmadaxz7#

如果您的shell支持-d参数,请尝试以下操作......
如果yyyy 0229存在,则返回日期和代码0,否则将抛出错误并返回代码1。

year=$(date +"%Y")
    echo "current year: ${year}"
    leapyear=$(date -d "${year}0229")
    if [ ${leapyear} = 0 ]
    then
        echo "Leap year"
    else
        echo "not a Leap year"
    fi

相关问题