多个发行版的日期功能支持

时间:2018-03-23 21:44:12

标签: bash shell sh

我正在寻找一些与编写脚本相关的帮助,该脚本可以在ubuntu,amazon-linux和OSX等操作系统上执行。

以下是一个简单的脚本,用于计算两个日期之间的天数。

str = str.replaceAll("X,"");

上述问题是它只能在可以使用gdate(GNU日期)的OSX上运行。 是否有人建议执行相同程序并可在不同系统上执行的解决方案?

由于

1 个答案:

答案 0 :(得分:-1)

我设法找到了满足我的解决方案。所以我正在检查正在使用哪个发行版,并根据我可以选择正确的工具:OS X上的gdate,否则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

Github file with the solution