回文章列表
作者rickie.bbs@bbs.sayya.org (寂莫生魚片), 信區: unix
標題Re: =?Big5?Q?=BD=D0=B0=DDSUN_OS=A4W=AA=BAdate=AB=FC=A5O=ACO=A7=5F=A6=B3=C5=E3=A5=DC=ABe=A4@=A4=E9=AA=BA=B0=D1=BC=C6?=
時間SayYA 資訊站 (Fri Sep 1 19:30:33 2006)
轉信站: GIBBS!ccnews.ncku!news.ccns.ncku!news.mksh.phc!news.nsysu!news.cis.nctu
Origin: kenduest.math.nctu.edu.tw

※ 引述《alexch.bbs@bbs.ncku.edu.tw (青醬意大利麵)》之銘言:
> 想把一個在linux上寫的shell移到solaris,功能是下載別台機上前一天的檔案,
> 但發現solaris 的date指令沒有像linux, 可用 -d-1days 顯示前一天的時間,
> 請問是否有其他的方法或指令,可達到相同的目地.

之前也遇過這個問題...
date 沒這個參數, 後來是寫 script 解決...
參考參考.
rickie@CentOS[~]$ cat date_shift.sh
#!/bin/sh
#set -x

if [ "${1}" = "-h" ]
then
echo "取得 n 天前或後的日期
Usage:  ${0} [n|-h]
                -h 顯示說明頁.
                n  表示欲平移的日期, 負數代表 n 天前.
ex:     ${0} -4 求四天前日期
        ${0} 3  求三天後日期"
        exit
fi

if [ "${1}" != "" ]
then
        days2shift=${1}
else
        days2shift=0
fi

expr ${days2shift} / 1 >/dev/null 2>&1
if [ $? -gt 1 ]
then
        days2shift=0
        #echo "Illegal input. \"${days2shift}\""
        #exit
fi

day=`date +%d`
month=`date +%m`
year=`date +%Y`

day=`expr ${day} + ${days2shift}`

days_of_month()
{
_mon=`expr ${1} / 1`
_year=`expr ${2} / 1`
if [ ${_mon} -eq 9 -a ${_year} -eq 1752 ]
then
        echo "19"
else
        echo `cal ${1} ${2}`|awk '{ printf $NF }'
fi
}

days=`days_of_month ${month} ${year}`
while [ ${day} -le 0 ]
do
        month=`expr ${month} - 1`
        if [ ${month} -eq 0 ]
        then
            year=`expr ${year} - 1`
            month=12
        fi
        days=`days_of_month ${month} ${year}`
        day=`expr ${day} + ${days}`
done

while [ ${day} -gt ${days} ]
do
        day=`expr ${day} - ${days}`
        month=`expr ${month} + 1`
        if [ ${month} -eq 13 ]
        then
            month=1
            year=`expr ${year} + 1`
        fi
        days=`days_of_month ${month} ${year}`
done

month=`expr ${month} / 1`
printf "%02d%02d%02d\n" ${year} ${month} ${day}
--
※ Origin: SayYA 資訊站 <bbs.sayya.org> 
◆ From: 218-171-151-29.dynamic.hinet.net
文章選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻