shell脚本----判断是否是闰年

写了一个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 的左方括号后、右方括号前必须有一个空格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值