Bash 支持多个发行版的日期函数
我正在寻找一些与编写一个可以在ubuntu、AmazonLinux和OSX等操作系统上执行的脚本相关的帮助 下面是一个简单的脚本,用于计算两个日期之间的天数Bash 支持多个发行版的日期函数,bash,shell,sh,Bash,Shell,Sh,我正在寻找一些与编写一个可以在ubuntu、AmazonLinux和OSX等操作系统上执行的脚本相关的帮助 下面是一个简单的脚本,用于计算两个日期之间的天数 #!/bin/bash current_date=$(gdate '+%Y-%m-%d') first_date=$(gdate -d "$current_date" "+%s") second_date=$(gdate -d "${1}" "+%s") case "$3" in "--seconds" | "-s") per
#!/bin/bash
current_date=$(gdate '+%Y-%m-%d')
first_date=$(gdate -d "$current_date" "+%s")
second_date=$(gdate -d "${1}" "+%s")
case "$3" in
"--seconds" | "-s") period=1
;;
"--minutes" | "-m") period=60;;
"--hours" | "-h") period=$((60*60));;
"--days" | "-d" | "") period=$((60*60*24));;
esac
datediff=$(( ($first_date - $second_date)/($period) ))
上面提到的问题是,它只能在有gdate(GNU日期)的OSX上运行有人能推荐一个执行相同过程并可在不同系统上执行的解决方案吗?
谢谢我找到了一个令我满意的解决方案。因此,我正在检查正在使用哪个发行版,并基于此,我可以选择正确的工具:
gdate
在OSX上,date
否则
check_package() {
package_name=${1}
check_type=$(which ${package_name})
if [[ -z "${check_type}" ]] ;
then
echo "Install the required ${package_name} which isn't installed!"
echo "Ensure ${package_name} is in your $PATH"
exit 2
fi
}
# Usage calculate_date_diff package_name date -d/-h/-m/-s
calculate_date_diff() {
current_date=$(${1} '+%Y-%m-%d')
first_date=$(${1} -d "$current_date" "+%s")
second_date=$(${1} -d "${2}" "+%s")
case "${3}" in
"--seconds" | "-s") period=1;;
"--minutes" | "-m") period=60;;
"--hours" | "-h") period=$((60*60));;
"--days" | "-d" | "") period=$((60*60*24));;
esac
datediff=$(( (${first_date} - ${second_date})/(${period}) ))
echo ${datediff}
}
# Format of date: yyyy-mm-dd
DATE_IN_PAST=${1}
# Detect the platform (similar to $OSTYPE)
OS="$(uname)"
case ${OS} in
'Darwin')
check_package "gdate" && calculate_date_diff "gdate" ${DATE_IN_PAST} -d
;;
'Linux')
check_package "date" && calculate_date_diff "date" ${DATE_IN_PAST} -d
;;
'FreeBSD')
check_package "date" && calculate_date_diff "date" ${DATE_IN_PAST} -d
;;
'SunOS')
check_package "date" && calculate_date_diff "date" ${DATE_IN_PAST} -d
;;
*) ;;
esac
gdate
即使在OS X上也默认不可用。但是date
在任何地方都可用。您尝试过使用日期吗?是的,您是正确的,但OSX上的日期行为完全不同。简而言之,OSX日期!=Linux/ubuntu日期如果你要发布一个答案,把代码放在答案中,而不仅仅是一个指向外部站点的链接。