shell獲取java返回值
㈠ shell腳本調java程序,獲取JAVA程序返回值並echo輸出
先運行java程序,然後用echo $?獲取程序的運行結果,如果是字元串,可以使用
result=$(java -jar xxx.jar)來獲取,當然這只是示例,$()中的命令使可以隨便修改的
㈡ java 怎麼取外部程序運行後的返回值
JAVA 中 process 類的使用
Process是一個抽象類 封裝了一個進程
創建 process
Process p = Runtime.getRuntime().exec(cmd); cmd 是字元串類型 也可以是字元串類型的數組 內容就是 命令行
Process p =ProcessBuilder.start();
Process 類提供了子進程的輸入流,子進程的輸出流子進程的輸入流,等待進程完成,檢查進程的退出狀態以及銷毀進程的方法;
創建的子進程沒有自己的控制台或終端,其所有的io操作都是通過(輸入流、輸出流、錯誤流)重定向到父進程中。
destroy()
殺掉子進程。
exitValue()
返回子進程的出口值。
InputStream getErrorStream()
獲得子進程的錯誤流。
InputStream getInputStream()
獲得子進程的輸入流。
OutputStream getOutputStream()
獲得子進程的輸出流。
waitFor()
導致當前線程等待,如果必要,一直要等到由該 Process 對象表示的進程已經終止。
-------分割線,以上來自網路-------
其中的exitValue()函數返回值就是你需要的東西。按照你的示例,return 12345,取得的值不一定等於12345,因為每個不同的shell對於程序退出的返回值是有自己的定義的,不一定是把程序return的值直接返回。可以查看各類shell的編程幫助。
㈢ 急,java中telnet訪問遠程電腦,然後執行cmd命令,再獲取返回值。
需要個jar包:commons-net-3.3-bin.zip
下載地址:http://commons.apache.org/proper/commons-net/download_net.cgi
你找的代碼我修改過了,復制直接使用。linux系統需要先開啟telnet服務
//執行的命令
System.out.println(she.sendCommand("ll"));
這個輸入linux 命令
importjava.io.InputStream;
importjava.io.PrintStream;
importorg.apache.commons.net.telnet.TelnetClient;
publicclassShell{
privateTelnetClienttelnet=newTelnetClient();
privateInputStreamin;
privatePrintStreamout;
privatecharprompt='$';//普通用戶結束
publicShell(Stringip,intport,Stringuser,Stringpassword){
try{
telnet.connect(ip,port);
in=telnet.getInputStream();
out=newPrintStream(telnet.getOutputStream());
//根據root用戶設置結束符
this.prompt=user.equals("root")?'#':'>';
login(user,password);
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*登錄
*
*@paramuser
*@parampassword
*/
publicvoidlogin(Stringuser,Stringpassword){
//read()Until("login:");
readUntil("login:");
write(user);
readUntil("Password:");
write(password);
readUntil(prompt+"");
}
/**
*讀取分析結果
*
*@parampattern
*@return
*/
publicStringreadUntil(Stringpattern){
try{
charlastChar=pattern.charAt(pattern.length()-1);
StringBuffersb=newStringBuffer();
charch=(char)in.read();
while(true){
sb.append(ch);
if(ch==lastChar){
if(sb.toString().endsWith(pattern)){
returnsb.toString();
}
}
ch=(char)in.read();
System.out.print(ch);
}
}catch(Exceptione){
e.printStackTrace();
}
returnnull;
}
/**
*寫操作
*
*@paramvalue
*/
publicvoidwrite(Stringvalue){
try{
out.println(value);
out.flush();
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*向目標發送命令字元串
*
*@paramcommand
*@return
*/
publicStringsendCommand(Stringcommand){
try{
write(command);
returnreadUntil(prompt+"");
}catch(Exceptione){
e.printStackTrace();
}
returnnull;
}
/**
*關閉連接
*/
publicvoiddisconnect(){
try{
telnet.disconnect();
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
// TelnetClienttelnet=newTelnetClient();
try{
Shellshe=newShell("192.168.1.10",23,"root","123456");
System.out.println(she);
//執行的命令
System.out.println(she.sendCommand("ll"));
she.disconnect();
}catch(Exceptione){
//TODO:handleexception
}
}
}
㈣ shell里判斷返回值的問題
你不要輸出結果,那就將結果重定向至 /dev/null 即可,具體代碼就是:
你的命令後面加上 >/dev/null 就不會有輸出結果了。舉個簡單的例子:
ping -c 192.168.1.1 這個命令,用於判斷到這個IP是否暢通,如果你在後面不加上重定向。
那麼每次都會輸出結果,也就是你現在的情況。所以下面代碼我就在ping的後面加上了重定向
代碼,讓結果屏蔽,僅獲取返回值$?,那屏幕上就不會顯示ping的結果了,只會顯示下面判斷結果,懂了么?
#!/bin/bash
ping-c2192.168.1.1>/dev/null
if[$?-eq0];then
echo192.168.1.1isokey!
else
echo192.168.1.1isfailed!
fi
㈤ 每天三分鍾搞定linux shell腳本26 函數返回值
函數可以產生返回值,有3個方法。
1)默認情況下是 最後一條語句對應的退出狀態碼
2) return 一個整數值
3)使用 echo語句 指定輸出
針對 方法1 建立如下腳本:
運行後輸出結果為:
針對 方法2 建立腳本:
運行後結果為:
針對 方法3 建立腳本
運行後輸出結果為:
方法3使用echo語句來返回結果,而且 並沒有把這個輸出到stdout 中。
函數返回數組與參數傳遞數組一樣,使用echo語句。舉例如下:
運行後輸出結果為:
㈥ 怎麼設置awk的返回值然後讓shell獲取
cnbubble@~/test:$catrr.sh
#!/bin/bash
functionergodic(){
forfilein`ls$1`
do
if[-d"$1/"$file]
then
echo"$1/$file"
ergodic"$1/$file"
#else
#echo$file
fi
done
}
ergodic"/home/cnbubble"
cnbubble@~/test:$a=`awk'BEGIN{sum=0}{sum=sum+NF}END{printsum}'rr.sh`
cnbubble@~/test:$echo$a
30
上面例子中統計了rr.sh文件每行的欄位(默認空格分割)數量,進行了累加求和。最後賦值給了Shell中的變數a
一般shell使用awk的結果通常是 將awk語句用 ` …… `括起來(鍵盤上Tab上面的那個鍵)
其他例子:
ls `awk……`
grep `awk……` fileName
㈦ java調用shell腳本,並得到shell腳本的返回值
文件名確實不對
.sh文件才是linux下的批處理文件,它不認bat的
另外要保證.sh中調用的其他函數在當前目錄下能正常運行