- 調用方式
Java調用linux命令執行的方式有兩種,一種是直接調用linux命令,一種是將linux命令寫到.sh腳本中,而後調用腳本執行。java
- 詳細說明
直接調用:使用java中lang包下面的Runtime類和Process類,其中Runtime類中的Runtime.getRuntime().exec(linux command)方法能夠直接執行linux命令,而Process類能夠接收Runtime.getRuntime().exec()類的返回值,並提供了waitFor()方法和destroy()方法,waitFor()方法的做用在於等待此process執行完成後再執行後面的內容,destroy()方法做用在於銷燬process。以下程序所示爲將fileName路徑下的全部文件打包成zip壓縮包,使用的方法爲直接調用。linux
調用shell腳本:直接調用方法存在一些弊端,好比複雜命令很差實現、有些命令莫名其妙實現不了等。所以我推薦使用調用shell腳本的方式實現linux命令。具體實現方法爲:首先將命令寫在shell腳本(.sh)中,而後在Runtime.getRuntime().exec()中調用「sh path/.sh」,其中path爲shell腳本的路徑。不少狀況下咱們須要循環調用相同的linux命令來實現咱們的功能,此時須要向linux命令中傳遞參數,實現案例以下所示:shell
其中imp.sh中的命令以下所示:數據庫
1 name=$1 2 su - oracle -c "imp user/pwd@實例名 file=filepath full=y ignore=y"
該語句實現的功能爲在root用戶下,切換到oracle目錄,並將某個.dmp文件使用imp命令導入oracle數據庫,而後返回到root用戶下,將該語句放到for循環中實現了多個.dmp文件導入oracle數據庫的功能。其中.dmp文件的文件名是變量,在shell命令中以name=$1代替,在linux命令中以${name}代指文件名,在調用時傳入該參數的值,linux命令中$1,$2…$n是佔位變量,在使用變量時按順序使用,賦值時按照相應的順序進行賦值。oracle