写了一个shell脚本,用于判断是否是闰年。这是第一次使用shell编程,本以为这个脚本可以很快的完成,结果打脸了,折腾了一阵子才让它运行成功。
#! /bin/bash
## This is a script that determines whether it is a leap year.
## The default object is this year. And you can specify a year
## as parameter input.
if [ $# -gt 1 ]
then
echo ParameterError:This script has one parameter.
elif [ $# -eq 1 ]
then
year=$1
fla=1
else
year=`date +"%Y"`
fla=0
fi
if [ $(($year%4)) -eq 0 ]&&[ $(($year%100)) -ne 0 ]||[ $(($year%400)) -eq 0 ]
then
echo $year is a leap year.
else
echo $year is not a leap year.
fi
这个脚本可以有一个参数,该参数用于指定要判断的年份,
举个例子,我们要判断1000年是否是闰年,
命令是:sh Is_LeapYear.sh 1000
结果如下:
该脚本可以不带参数,判断的是今年是否是闰年,
执行结果如下:
遇到的bug
下面是含有bug的代码:
if [$# -gt 1 ]
then
echo ParameterError:This script has one parameter.
elif [ $# -eq 1]
year=$1
fla=1
else
year=`date +"%Y"`
fla=0
fi
if [ $year%4 -eq 0 && $year%100 -ne 0 || $year%400 -eq 0 ]
then
echo $year is a leap year.
else
echo $year is not a leap year.
fi
看起来和正确代码没什么区别,但是它有好几个bug
bug1:
if的左方括号与$之间少了一个空格,报错:[0: not found
编译器将 [0 视为一个变量了,
bug2:
1和右方括号间少了一个空格,报错:[: missing ]
bug3:
elif 的下面少了一个关键字then,
报错:Syntax error: “else” unexpected (expecting “then”)
bug4:
再次遇见了丢失右方括号的错误,这里我纠结了很久,因为看上去没有错误,直到我参考别人的代码,发现比较运算必须用方括号括起来,几个比较运算之间再用逻辑运算符连接起来,像下面一样:
看起来没bug了,但还是报错了
[: Illegal number: 2020%4
原来运算要加几个符号,不然它不会进行取余运算,正确代码如下:
终于把bug 弄完了,我想说用shell编程太别扭了,不习惯它的语法。比如 if 的左方括号后、右方括号前必须有一个空格。