2010-01-07 55 views
0

有人可以幫我理解下面這段代碼,它決定了從數據庫中選出數據的開始和結束日期。瞭解一個ksh腳本部分

# Get the current time as the stop time. 
# 
stoptime=`date +"%Y-%m-%d %H:00"` 
if test $? -ne 0 
then 
    echo "Failed to get the date" 
    rm -f $1/.optpamo.pid 
    exit 4 
fi 

# 
# Read the lasttime file to get the start time 
# 
if test -f $1/optlasttime 
then 
    starttime=`cat $1/optlasttime` 
    # if the length of the chain is zero 
    # (lasttime is empty) It is updated properly 
    # (and I wait for the following hour) 
    if test -z "$starttime" 
    then 
     echo "Empty file lasttime" 
     echo $stoptime > $1/optlasttime 
     rm -f $1/.optpamo.pid 
     exit 5 
    fi 
else 
    # If lasttime does not exist I create, it with the present date 
    # and I wait for the following hour 
    echo "File lasttime does not exist" 
    echo $stoptime > $1/optlasttime 
    rm -f $1/.optpamo.pid 
    exit 6 
fi 

感謝

+2

哪些部分你不清楚? – 2010-01-07 19:27:33

+0

看起來您對腳本片段的格式有問題。如果您突出顯示它們並按下編輯器上方的按鈕'0101'圖標,它應該將它們格式化爲代碼。 – 2010-01-08 06:36:07

+0

該劇本足夠好評,所以你不明白什麼? – ghostdog74 2010-01-08 06:41:37

回答

1

腳本檢查,看看是否有一個名爲optlasttime在指定爲參數($1)目錄中的非空文件。如果是,腳本成功退出(狀態0)。如果文件不存在或爲空,則格式爲2010-01-07 14:00的當前小時寫入該文件,另一個名爲.optpamo.pid的文件將從參數目錄中刪除,並且腳本退出失敗(狀態爲56)。

這個腳本顯然是一個被某個外部過程調用的實用程序,爲了充分理解您需要引用它。

0

1)設置停止時間到當前時間

2)檢查文件$ ​​1/optlasttime存在(其中$ 1傳遞到腳本)

a.) if $1/optlasttime exists it checks the contents of the file (which it is assumed that if it does have contents it is a timestamp) 

b.) if $1/optlasttime does not exist it populates the $1/optlasttime file with the stoptime. 
+0

謝謝你的解釋傢伙。我可以手動指定日期時間(一段時間)以獲取該特定時間段的數據。我的意思是我可以在代碼中指定停止時間爲2010-01-03 15:00,啓動時間爲2010-01-04 02:00,並運行整個腳本,如./scriptname? – Shajju 2010-01-08 10:56:53

+0

是的,如果你願意,你可以硬編碼值。或者您可以將它設置爲允許從$ 1和$ 2的命令行發出啓動和停止時間: ./scriptname「2010-01-04 02:00」「2010-01-04 04:00」 – Courtland 2010-01-08 13:50:29

0

我複製並粘貼一個小片段這到一個文件我叫test.ksh

stoptime=`date +"%Y-%m-%d %H:00"` 
if test $? -ne 0 
then 
    echo "Failed to get the date" 
    rm -f $1/.optpamo.pid 
    exit 4 
fi 

然後我跑了它在命令行,像這樣:

[email protected]:~$ ksh -x ./temp.ksh 
+ date '+%Y-%m-%d %H:00' 
+ stoptime='2010-01-08 18:00' 
+ test 0 -ne 0 

這個-x標誌使ksh可以在執行時全部打印出每個命令行。比較你在這裏看到的與上面的shell腳本片段應該告訴你一些關於ksh是如何解釋文件的。

如果你在整個文件中運行它,你應該對它正在做的事情有一個很好的感覺。

要了解更多信息,您可以閱讀man ksh或在線搜索ksh scripting tutorial

在一起,這三件事應該可以幫助你學到很多東西,比我們簡單地告訴你腳本是幹什麼的。

+0

感謝您的建議。有沒有可以運行測試命令/腳本的在線unix環境? – Shajju 2010-01-08 11:26:23