java 執行shell腳本

1 linux和windows分隔符不一致問題解決java

File.separator經過這個函數能夠獲取對應windows和linux的分隔符linux

windows:E:\\jenkins\\workspace\\shell

"E:"+File.separator+"jenkins"+File.separator+"workspace"+File.separatorwindows

linux:/var/lib/jenkins/workspace/bash

File.separator+"var"+File.separator+"lib"+File.separator+"jenkins"+File.separator+"workspace"函數

 

2判斷當前系統的類型spa

String osname = System.getProperty("os.name");
if ((osname != null) && (osname.toLowerCase().startsWith("win"))){
//win操做系統
return 1;
}
//linux操做系統
return 0;
}操作系統

 

3獲取項目當前路徑get

//File directory = new File("test-data/pp/");jenkins

File directory = new File("test-data" + File.separator + "pp" + File.separator);
String courseFile = directory.getCanonicalPath();

 

4 java執行shell命令,因爲執行的shell腳本須要權限,在執行shell腳本前先調用shell命令修改對應的權限,而後執行shell腳本

List<String> commandList = new LinkedList<String>();

commandList.add("test.sh");
commandList.add("fileparam");

//組裝命令

String[] commands = new String[commandList.size()];
for (int i = 0; i < commandList.size(); i++) {
commands[i] = commandList.get(i);
}

執行shell命令

process = Runtime.getRuntime().exec(commands);

能夠參考https://www.jianshu.com/p/af4b3264bc5d

 

5 遇個文件找不到或者打不開,權限不夠的狀況,修改權限,還有error 2,no such file等,多是shell腳本中有java識別不了的字符,能夠用echo $SHELL命令能夠查看當前系統使用的shell類型和路徑,例如/bin/bash

List<String> commandList0 = new LinkedList<String>();
commandList0.add("/bin/bash");
commandList0.add("-c");
commandList0.add("chmod -R 777 " + courseFile);

 

6  windows和linux用的腳本不同,編寫一個.bat和一個.sh

windows下bat文件中 設置變量:

SET ttt=%1   將第一個參數賦值給變量ttt

SET CurPath=%~dp0   獲取到當前路徑,例如文件位於目錄下E:\test\bin,CurPath的值爲E:\test\bin\

SET CurPath=%CurPath:~0,-1%   獲取變量1到n-1對應的字段,去除了最後的分割符號

 

linux下shell腳本

workdir=$(cd $(dirname $0); pwd)  獲取到當前目錄

鏈接字符能夠直接用變量加上引號,例如變量param的值是/bin/bash,則${param}'/'的值爲/bin/bash/

相關文章
相關標籤/搜索