歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux管理 >> Linux問題解決

在Linux中利用變量給文件命名

前不久有一個Linux系統管理員向筆者求助。他說他們在Linux操作系統上部署了一個Oracle 10G的數據庫系統。現在他們利用數據庫系統中的數據泵工具從系統中備份數據。他們希望每天把這個備份文件復制到一個特定的地方。到這一步為止都沒有問題。但是他們希望在復制的過程中,能夠利用變量名對這個備份文件進行命名。如按星期幾的不同,分別命名為1backup.dmp,2backup.dmp等等。前面的1、2就表示星期幾的意思。這麼設置的話,一個星期一個輪回。到下個星期一的話,新的備份文件就會把舊的備份文件替換掉。如此的話,備份文件所占用的硬盤空間也就不會無限制的增加上去。

筆者對於他們為什麼不直接采用Oracle提供的備份工具制定備份策略對數據庫進行備份感到不解。不過要實現上面這個利用變量來給文件命名的話,還是可以實現的。筆者根據他們企業的需求,給這個系統管理員詳細的闡述了實現方法。

一、文件創建時間與系統時間的關系。

在利用變量來命名文件名字的時候(如時間變量),需要注意一個問題,就是文件的創建時間與系統時間的關系。如上面這個需求,如果某個文件是在星期一創建的,而在星期二時復制這個文件。那麼此時文件的名字應該為多少呢?是按文件的創建時間來命名,還是按復制的時間來命名的。如果從上面這個需求來看,利用文件的創建時間來命名更加的合理。因為這個創建時間才真正體現了數據庫的備份時間。

二、相關命令參數解析。

如果要把一個文件復制到另外一個地方,同時利用時間變量對其進行重命名的話,那麼可以利用如下的命令來實現cp mydb.log "(date %w)"mydb.log。這個命令的意思就是把mydb.log復制到一個特定的位置(當前目錄下),並對此進行重新命名。命名的規則就是在原來的文件變量前面加上一個時間參數,這裡采用的是星期的時間變量。

"(date %w)"這個參數就是截取星期幾的時間變量。注意,這裡的時間是按照文件的創建時間來的,而不是參考文件復制的時間。也就是說,如果這個文件的創建時間是星期三,而復制時間是星期四的話,那麼這個變量的值就為3,而不是4。因為文件的創建時間為3。筆者以前剛開始接觸Linux操作系統的時候,經常犯這個錯誤。希望筆者這個過來人常犯的錯誤,能夠引起大家的警惕。

另外上面這個時間參數,必須要用雙引號括起來。不過不這麼做的話,那麼系統就會提示這個命令有錯誤。這是一個語法上的錯誤。所以如果系統管理員在批處理程序中使用這個命令的話,那麼最好能夠進行預先測試。因為這些語法錯誤的話,就算再老到的系統管理員,一不小心就容易犯。實踐是檢驗真理的唯一標准,這句話是不會錯的。

還有一個小細節就是"(date %w)"與"(date +%w)"有區別嗎?這個既有區別,又可以說沒有。這主要是看用在什麼場合了。如果用在CP命令中,則中間加不加(+)加號,是一樣的。但是,在其他一些命令場合中,必須要加入中間這個加號。否則的話,系統會提示錯誤。如下面筆者要談到的ECHO命令,就有這方面的要求。

三、利用Echo命令來進行測試。

如果系統管理員對於自己編寫的命令參數不怎麼肯定的話,那麼就可以利用echo命令來進行測試。Echo命令可以顯示環境變量的值,也可以顯示某些特定變量的值。其實這些變量就是系統中的環境變量。如下圖所示。利用echo $(date +%w)就可以顯示當天系統時間。這個命令只顯示星期幾。

如果使用這個命令的話,跟cp命令中最終的時間參數還是有一點差距,主要體現在以下這幾個方面。

首先,要利用echo命令來顯示系統變量值的時候,必須在變量前面加上$符號。如果加上這個符號,系統就會認為這是一個環境變量,或者由環境變量轉換過來的一個變量。如果不加這個符號的話,則操作系統會無法識別,也就不能夠正常顯示這個變量的值了。

其次,在這個變量中,中間必須加入+號。如上圖所示,如果不加入這個+號的話,則操作系統就會提示錯誤,說%w是一個無效的參數。但是在cp命令中,則沒有這個強制的限制。在中間加不加這個加號,都能夠達到同樣的效果。不過為了提高參數的准確性,最好大家還是按照這個echo命令可以認可的格式下。因為echo命令可以認可的格式,則在其他命令中是通用的。相反,其他命令中可以用的格是,在echo等命令上不一定通用。所以為了提高編寫的腳本程序的移植性,最好能夠采用通用的變量書寫方式。

Copyright © Linux教程網 All Rights Reserved