當前位置:首頁 » 編程軟體 » javalinuxshell腳本

javalinuxshell腳本

發布時間: 2022-11-13 17:17:02

linux/android下java語句如何賦予shell腳本可執行許可權

看看你java運行使用的是哪個客戶,一般是當前用戶,你建一個這個用戶有全部許可權的目錄「u」,然後執行使用exec("chmod 777 /u/a.sh");exec("/u/a.sh")

Ⅱ 請教大神Linux下編寫shell腳本,利用javac如何編譯完整的java工程

#!/bin/sh# Define some constants
ONSSERVER=ONSServer
PROJECT_PATH=/root/iot-oid
JAR_PATH=$PROJECT_PATH/lib
BIN_PATH=$PROJECT_PATH/bin
SRC_PATH=$PROJECT_PATH/src/$ONSSERVER

# First remove the sources.list file if it exists and then create the sources file of the project
rm -f $SRC_PATH/sources
find $SRC_PATH/com -name *.java > $SRC_PATH/sources.list

# First remove the ONSServer directory if it exists and then create the bin directory of ONSServer
rm -rf $BIN_PATH/$ONSSERVER
mkdir $BIN_PATH/$ONSSERVER

# Compile the project
javac -d $BIN_PATH/$ONSSERVER -classpath $JAR_PATH/jdom.jar:$JAR_PATH/oro-2.0.8.jar @$SRC_PATH/sources.list

這個文件你可以保存好,然後 chmod +x ./shell 運行

javac -d YourDir -classpath xx.jar xxxx.java xx.java 這個命令的簡單的看就是 YourDir 你的生成文件的位置, -classpath 就是你引入的 jar 的路徑, xxx.java 就是源文件

javac 的用法:

用法: javac <options> <source files>
其中, 可能的選項包括:
-g 生成所有調試信息
-g:none 不生成任何調試信息
-g:{lines,vars,source} 只生成某些調試信息
-nowarn 不生成任何警告
-verbose 輸出有關編譯器正在執行的操作的消息
-deprecation 輸出使用已過時的 API 的源位置
-classpath <路徑> 指定查找用戶類文件和注釋處理程序的位置
-cp <路徑> 指定查找用戶類文件和注釋處理程序的位置
-sourcepath <路徑> 指定查找輸入源文件的位置
-bootclasspath <路徑> 覆蓋引導類文件的位置
-extdirs <目錄> 覆蓋所安裝擴展的位置
-endorseddirs <目錄> 覆蓋簽名的標准路徑的位置
-proc:{none,only} 控制是否執行注釋處理和/或編譯。
-processor <class1>[,<class2>,<class3>...] 要運行的注釋處理程序的名稱; 繞過默認的搜索進程
-processorpath <路徑> 指定查找注釋處理程序的位置
-parameters 生成元數據以用於方法參數的反射
-d <目錄> 指定放置生成的類文件的位置
-s <目錄> 指定放置生成的源文件的位置
-h <目錄> 指定放置生成的本機標頭文件的位置
-implicit:{none,class} 指定是否為隱式引用文件生成類文件
-encoding <編碼> 指定源文件使用的字元編碼
-source <發行版> 提供與指定發行版的源兼容性
-target <發行版> 生成特定 VM 版本的類文件
-profile <配置文件> 請確保使用的 API 在指定的配置文件中可用
-version 版本信息
-help 輸出標准選項的提要
-A關鍵字[=值] 傳遞給注釋處理程序的選項
-X 輸出非標准選項的提要
-J<標記> 直接將 <標記> 傳遞給運行時系統
-Werror 出現警告時終止編譯
@<文件名> 從文件讀取選項和文件名

Ⅲ 如何在java程序中調用linux命令或者shell腳本

publicstaticStringexecShell(StringshellString){System.out.println("將要執行的shell語句是:"+shellString);StringisOK="ok";try{Processprocess=Runtime.getRuntime().exec(shellString);BufferedReaderinput=newBufferedReader(newInputStreamReader(process.getInputStream()));Stringline="";while((line=input.readLine())!=null){System.out.println(line);}input.close();intexitValue=process.waitFor();if(0!=exitValue){isOK="no";System.err.println("callshellfailed.errorcodeis:"+exitValue);}}catch(Throwablee){e.printStackTrace();}returnisOK;}這是我在java中用過的一個調用shell的函數,你可以試試;執行成功返回ok,執行失敗返回no

Ⅳ 如何在java程序中調用linux命令或者shell腳本

Java提供了Runtime類,用於調用Shell腳本,這個類提供了好幾個不同參數的exec()方法, 看其源碼,最後其實都是轉化為一個方法,

exec(String[] cmdarray, String[] envp, File dir)

cmdarray: 包含要調用的腳本及腳本的參數
envp:環境變數,name=value形式

dir:腳本工作目錄

基本代碼如下:
String[] command = new String [] {"/home/CommandTest/test.sh", "para1", "para2"};

process = Runtime.getRuntime().exec(command, new String[] {"LOG_V=1"}, new File("/home/CommandTest"));

// 腳本標准輸出流

BufferedReader inputStream = new BufferedReader(

new InputStreamReader(process.getInputStream(), "UTF-8"));

// 腳本錯誤輸出流

BufferedReader errorStream = new BufferedReader(

new InputStreamReader(process.getErrorStream(), "UTF-8"));

// 啟動線程處理輸出流

// stdoutTread.start();

// erroutThread.start();

// 處理返回值及超時的情況

//while(finish-start < timeout) {

// int rtnCode = process.waitFor();

//}

Ⅳ 如何在java程序中調用linux命令或者shell腳本

做到這,主要依賴2個類:Process和Runtime。
首先看一下Process類:
ProcessBuilder.start() 和 Runtime.exec 方法創建一個本機進程,並返回 Process 子類的一個實例,
該實例可用來控制進程並獲得相關信息。Process 類提供了執行從進程輸入、執行輸出到進程、等待進程完成、
檢查進程的退出狀態以及銷毀(殺掉)進程的方法。
創建進程的方法可能無法針對某些本機平台上的特定進程很好地工作,比如,本機窗口進程,守護進程,Microsoft Windows
上的 Win16/DOS 進程,或者 shell 腳本。創建的子進程沒有自己的終端或控制台。它的所有標准 io(即 stdin、stdout 和 stderr)
操作都將通過三個流 (getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父進程。
父進程使用這些流來提供到子進程的輸入和獲得從子進程的輸出。因為有些本機平台僅針對標准輸入和輸出流提供有限的緩沖區大小,
如果讀寫子進程的輸出流或輸入流迅速出現失敗,則可能導致子進程阻塞,甚至產生死鎖。
當沒有 Process 對象的更多引用時,不是刪掉子進程,而是繼續非同步執行子進程。
對於帶有 Process 對象的 Java 進程,沒有必要非同步或並發執行由 Process 對象表示的進程。
特別需要注意的是:
1,創建的子進程沒有自己的終端控制台,所有標注操作都會通過三個流
(getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父進程(父進程可通過這些流判斷子進程的執行情況)
2,因為有些本機平台僅針對標准輸入和輸出流提供有限的緩沖區大小,如果讀寫子進程的輸出流或輸入流迅速出現失敗,
則可能導致子進程阻塞,甚至產生死鎖
abstract void destroy()
殺掉子進程。
abstract int exitValue()
返回子進程的出口值。根據慣例,值0表示正常終止。
abstract InputStream getErrorStream()
獲取子進程的錯誤流。
abstract InputStream getInputStream()
獲取子進程的輸入流。
abstract OutputStream getOutputStream()
獲取子進程的輸出流。
abstract int waitFor()
導致當前線程等待,如有必要,一直要等到由該 Process 對象表示的進程已經終止。
如果已終止該子進程,此方法立即返回。如果沒有終止該子進程,調用的線程將被阻塞,直到退出子進程。
特別需要注意:如果子進程中的輸入流,輸出流或錯誤流中的內容比較多,最好使用緩存(注意上面的情況2)
再來看一下Runtime類:
每個Java應用程序都有一個Runtime類實例,使應用程序能夠與其運行的環境相連接。可以通過getRuntime方法獲取當前運行時環境。
應用程序不能創建自己的Runtime類實例。
介紹幾個主要方法:
Process exec(String command)
在單獨的進程中執行指定的字元串命令。
Process exec(String command, String[] envp)
在指定環境的單獨進程中執行指定的字元串命令。
Process exec(String command, String[] envp, File dir)
在有指定環境和工作目錄的獨立進程中執行指定的字元串命令。
Process exec(String[] cmdarray)
在單獨的進程中執行指定命令和變數。
Process exec(String[] cmdarray, String[] envp)
在指定環境的獨立進程中執行指定命令和變數。
Process exec(String[] cmdarray, String[] envp, File dir)
在指定環境和工作目錄的獨立進程中執行指定的命令和變數。
command:一條指定的系統命令。
envp:環境變數字元串數組,其中每個環境變數的設置格式為name=value;如果子進程應該繼承當前進程的環境,則該參數為null。
dir:子進程的工作目錄;如果子進程應該繼承當前進程的工作目錄,則該參數為null。
cmdarray:包含所調用命令及其參數的數組。
以下為示例(要打成可執行jar包扔到linux下執行):
public class test {
public static void main(String[] args){
InputStream in = null;
try {
Process pro = Runtime.getRuntime().exec(new String[]{"sh",
"/home/test/test.sh","select admin from M_ADMIN",
"/home/test/result.txt"});
pro.waitFor();
in = pro.getInputStream();
BufferedReader read = new BufferedReader(new InputStreamReader(in));
String result = read.readLine();
System.out.println("INFO:"+result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在這用的是Process exec(String[] cmdarray)這個方法
/home/test/test.sh腳本如下:
#!/bin/sh

#查詢sql
SQL=$1
#查詢結果保存文件
RESULT_FILE=$2
#資料庫連接
DB_NAME=scott
DB_PWD=tiger
DB_SERVER=DB_TEST

RESULT=`sqlplus -S ${DB_NAME}/${DB_PWD}@${DB_SERVER}<< !
set heading off
set echo off
set pages 0
set feed off
set linesize 3000
${SQL}
/
commit
/
!`

echo "${RESULT}" >> ${RESULT_FILE}
echo 0;
特別需要注意的是,當需要執行的linux命令帶有管道符時(例如:ps -ef|grep java),用上面的方法是不行的,解決方式是將需要執行的命令作為參數傳給shell
public class Test {
public static void main(String[] args) throws Exception{
String[] cmds = {"/bin/sh","-c","ps -ef|grep java"};
Process pro = Runtime.getRuntime().exec(cmds);
pro.waitFor();
InputStream in = pro.getInputStream();
BufferedReader read = new BufferedReader(new InputStreamReader(in));
String line = null;
while((line = read.readLine())!=null){
System.out.println(line);
}
}
}

PS:
Runtime.getRuntime().exec()這種調用方式在java虛擬機中是十分消耗資源的,即使命令可以很快的執行完畢,頻繁的調用時創建進程消耗十分客觀。
java虛擬機執行這個命令的過程是,首先克隆一條和當前虛擬機擁有一樣環境變數的進程,再用這個新的進程執行外部命令,最後退出這個進程。頻繁的創建對CPU和內存的消耗很大。

Ⅵ 如何在java中執行shell腳本

在java程序中如何調用linux的命令?如何調用shell腳本呢? 這里不得不提到java的process類了。 process這個類是一個抽象類,封裝了一個進程(你在調用linux的命令或者shell腳本就是為了執行一個在linux下執行的程序,所以應該使用process類)。

Ⅶ 如何在java程序中調用linux命令或者shell腳本

publicstaticStringexecShell(StringshellString){
System.out.println("將要執行的shell語句是:"+shellString);
StringisOK="ok";
try{
Processprocess=Runtime.getRuntime().exec(shellString);

BufferedReaderinput=newBufferedReader(newInputStreamReader(process.getInputStream()));
Stringline="";
while((line=input.readLine())!=null){
System.out.println(line);
}
input.close();
intexitValue=process.waitFor();
if(0!=exitValue){
isOK="no";
System.err.println("callshellfailed.errorcodeis:"+exitValue);
}
}catch(Throwablee){
e.printStackTrace();
}

returnisOK;
}

這是我在java中用過的一個調用shell的函數,你可以試試;執行成功返回ok,執行失敗返回no

Ⅷ 如何在java程序中調用linux命令或者shell腳本

**
* 運行shell腳本
* @param shell 需要運行的shell腳本
*/
public static void execShell(String shell){
try {
Runtime rt = Runtime.getRuntime();
rt.exec(shell);
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 運行shell
*
* @param shStr
* 需要執行的shell
* @return
* @throws IOException
*/
public static List runShell(String shStr) throws Exception {
List<String> strList = new ArrayList();

Process process;
process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",shStr},null,null);
InputStreamReader ir = new InputStreamReader(process
.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String line;
process.waitFor();
while ((line = input.readLine()) != null){
strList.add(line);
}

return strList;
}

Ⅸ 如何在java程序中調用linux命令或者shell腳本

**
* 運行shell腳本
* @param shell 需要運行的shell腳本
*/
public static void execShell(String shell){
try {
Runtime rt = Runtime.getRuntime();
rt.exec(shell);
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 運行shell
*
* @param shStr
* 需要執行的shell
* @return
* @throws IOException
*/
public static List runShell(String shStr) throws Exception {
List<String> strList = new ArrayList();

Process process;
process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",shStr},null,null);
InputStreamReader ir = new InputStreamReader(process
.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String line;
process.waitFor();
while ((line = input.readLine()) != null){
strList.add(line);
}

return strList;
}

Ⅹ 如何在java程序中調用linux命令或者shell腳本

在java程序中如何調用linux的命令?如何調用shell腳本呢?

這里不得不提到java的process類了。

process這個類是一個抽象類,封裝了一個進程(你在調用linux的命令或者shell腳本就是為了執行一個在linux下執行的程序,所以應該使用process類)。

process類提供了執行從進程輸入,執行輸出到進程,等待進程完成,檢查進程的推出狀態,以及shut down掉進程。

至於詳細的process類的介紹放在以後介紹。

另外還要注意一個類:Runtime類,Runtime類是一個與JVM運行時環境有關的類,這個類是Singleton的。

這里用到的Runtime.getRuntime()方法是取得當前JVM的運行環境,也是java中唯一可以得到運行環境的方法。(另外,Runtime的大部分方法都是實例方法,也就是說每次運行調用的時候都需要調用到getRuntime方法)

下面說說Runtime的exec()方法,這里要注意的有一點,就是public Process exec(String [] cmdArray, String [] envp);這個方法中cmdArray是一個執行的命令和參數的字元串數組,數組的第一個元素是要執行的命令往後依次都是命令的參數,envp感覺應該和C中的execve中的環境變數是一樣的,envp中使用的是name=value的方式。

下面說一下,如何使用process來調用shell腳本

例如,我需要在linux下實行linux命令:sh test.sh,下面就是執行test.sh命令的方法:

這個var參數就是日期這個201102包的名字。

String shpath="/test/test.sh"; //程序路徑

Process process =null;

String command1 = 「chmod 777 」 + shpath;
process = Runtime.getRuntime().exec(command1);
process.waitFor();

String var="201102"; //參數

String command2 = 「/bin/sh 」 + shpath + 」 」 + var;
Runtime.getRuntime().exec(command2).waitFor();

注意:

1

我為什麼要使用 chmod 777命令呢?在有的機器上面,可能沒有設置許可權問題。這是你在linux下面執行shell腳本需要注意的問題。沒有的話,就需要添加許可權,就用chmod 777,否則在執行到Runtime.getRuntime().exec的時侯會出現Permission denied錯誤。

2

waitFor()這個也是必不可缺的,如果你需要執行多行命令的話,把waitFor()這個加上。

熱點內容
connectorpython 發布:2025-05-14 09:48:50 瀏覽:761
配置不好怎麼辦 發布:2025-05-14 09:46:40 瀏覽:622
數據流程圖中的數據存儲是指 發布:2025-05-14 09:46:39 瀏覽:444
我的世界伺服器id前綴mod 發布:2025-05-14 09:45:53 瀏覽:830
完整後台網站源碼 發布:2025-05-14 09:45:46 瀏覽:455
傳奇祝福腳本 發布:2025-05-14 09:34:12 瀏覽:571
電腦文件加密的軟體 發布:2025-05-14 09:29:20 瀏覽:354
擴展資料庫表空間 發布:2025-05-14 09:29:10 瀏覽:642
mongo存儲過程 發布:2025-05-14 09:27:54 瀏覽:715
伺服器的公網ip在哪看 發布:2025-05-14 09:18:30 瀏覽:253