• linux下的shell命令的编写,以及java怎样调用linux的shell命令(java怎样获取linux上的网卡的ip信息)


    程序猿都非常懒,你懂的!

    近期在开发中,须要用到server的ip和mac信息。可是server是架设在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();//获得本机IP
    			String 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 export
    network=`cat /nac/config/nac_sys.conf | grep "manager"|awk '{print $2}'`
    #get net export local ip
    ifconfig $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
     进行共同学习!





  • 相关阅读:
    CUDA并行算法系列之FFT快速卷积
    CUDA并行算法系列之规约
    混合语言编程:启用CLR(公共语言运行时编译)让C#调用C++
    【CUDA并行程序设计系列(4)】CUDA内存
    【CUDA并行程序设计系列(3)】CUDA线程模型
    【CUDA并行程序设计系列(2)】CUDA简介及CUDA初步编程
    【CUDA并行程序设计系列(1)】GPU技术简介
    关于CUDA的一些学习资料
    MacOS 快捷键技巧
    chrom 自带截屏用法
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3829041.html
Copyright © 2020-2023  润新知