linux下的shell命令的編寫,以及java如何調用linux的shell命令(java如何擷取linux上的網卡的ip資訊)__linux

來源:互聯網
上載者:User

程式員都很懶,你懂的。

最近在開發中,需要用到伺服器的ip和mac資訊。但是伺服器是架設在linux系統上的,對於多網口,在擷取ip時就產生了很大的問題。下面是在windows系統上,java擷取本地ip的方法。貼代碼:

package com.herman.test;import java.net.InetAddress;/** * @see 擷取電腦ip * @author Herman.Xiong * @date 2014年5月16日 09:35:38 */public class Test {public static void main(String[] args) {test0();}/** * @see 擷取windows系統上的ip(單網卡) * @author Herman.Xiong * @date 2014年5月16日 09:36:29 */public static void test0(){try {InetAddress addr = InetAddress.getLocalHost();String ip=addr.getHostAddress().toString();//獲得本機IPString address=addr.getHostName().toString();//獲得本機名稱System.out.println("獲得本機IP:"+ip);System.out.println("獲得本機名稱:"+address);} catch (Exception e) {e.printStackTrace();}}}
擷取詳細資料,貼代碼:

/** * @see 擷取windows系統上網卡資訊 * @author Herman.Xiong * @date 2014年5月16日 10:17:30 */@SuppressWarnings("unchecked")public static void test1(){Enumeration netInterfaces = null;    try {        netInterfaces = NetworkInterface.getNetworkInterfaces();        while (netInterfaces.hasMoreElements()) {            NetworkInterface ni = (NetworkInterface) netInterfaces.nextElement();            System.out.println("DisplayName:" + ni.getDisplayName());            System.out.println("Name:" + ni.getName());            Enumeration ips = ni.getInetAddresses();            while (ips.hasMoreElements()) {                System.out.println("IP:"+ ((InetAddress) ips.nextElement()).getHostAddress());            }        }    } catch (Exception e) {        e.printStackTrace();    }}
運行效果圖:

好吧,看看上面的列印,你就知道了,有多個ip,而且在linux上的情況更複雜。這種比較麻煩的情況,被我排除了,我使用了一種新的方法,就是linux上的shell指令碼。文法代碼如下:

#linux中的shell指令碼的學習(so easy)#1.注釋#在進行shell編程時,以#開頭的句子表示注釋,直到這一行的結束。#我們真誠地建議您在程式中使用注釋。如果您使用了注釋,#那麼即使相當長的時間內沒有使用該指令碼,您也能在很短的時間內明白該指令碼的作用及工作原理。#2變數#在其他程式設計語言中您必須使用變數。在shell編程中,所有的變數都由字串組成,並且您不需要對變數進行聲明。要賦值給一個變數,您可以這樣寫:#變數名=值#取出變數值可以加一個貨幣符號($)在變數前面:#hello world#!/bin/sh#對變數賦值:hw="hello world"# 現在列印變數hw的內容:echo "變數hw的值為:"echo $hw

一下是擷取ip的shell指令碼代碼:

#!/bin/bash#get net exportnetwork=`cat /nac/config/nac_sys.conf | grep "manager"|awk '{print $2}'`#get net export local ipifconfig $network|egrep "inet addr:"|cut -d ":" -f2|awk '{print $1}'
指令碼vi寫好了,隨便放一個位置。然後用java調用,一下是java在linux上調用shell指令碼的命令:

/** * @see 執行指令碼擷取linux上的ip * @author Herman.Xiong * @date 2014年5月16日 10:33:23 * @return */public static String execShell(){String ip="";// 擷取當前程式的運行進程對象Runtime runtime = Runtime.getRuntime();// 聲明處理類對象Process process = null;// 返回行資訊// 輸入資料流InputStream is = null;// 位元組流InputStreamReader isr = null;// 緩衝流BufferedReader br = null;// 結果try {// 執行PING命令process = runtime.exec("/var/script/herman.sh");// 執行個體化輸入資料流is = process.getInputStream();// 把輸入資料流轉換成位元組流isr = new InputStreamReader(is);// 從位元組中讀取文本br = new BufferedReader(isr);String line="";while ((line = br.readLine()) != null) {ip+=line;}is.close();isr.close();br.close();} catch (IOException e) {e.printStackTrace();runtime.exit(1);}return ip;}
OK,一切大功告成。

歡迎大家關注我的部落格,如有疑問,請加qq群 135430763  進行共同學習。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.