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

简介: <p><span style="color:#FF0000">程序员都很懒,你懂的!</span></p> <p><span style="color:#FF0000"><span style="color:#000000">最近在开发中,需要用到服务器的ip和mac信息。但是服务器是架设在linux系统上的,对于多网口,在获取ip时就产生了很大的问题。下面是在windows系统上,ja

程序员都很懒,你懂的!

最近在开发中,需要用到服务器的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();//获得本机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
 进行共同学习!
目录
相关文章
|
6天前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
6天前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
10天前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
27 2
|
1月前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
|
2月前
|
监控 Shell Linux
在Linux中,如何使用shell脚本检测磁盘使用率?
在Linux中,如何使用shell脚本检测磁盘使用率?
java类模拟客户端调用servlet (httpClient)
最近做项目,用到JAVA普通类调用一个servlet应用,所以把部分代码也贴上来了。
137 0
java类模拟客户端调用servlet (httpClient)
java类模拟客户端调用servlet (httpClient)
193 0
|
7天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
21 2
|
11天前
|
存储 缓存 Java
java线程内存模型底层实现原理
java线程内存模型底层实现原理
java线程内存模型底层实现原理
|
15天前
|
缓存 Java 应用服务中间件
Java虚拟线程探究与性能解析
本文主要介绍了阿里云在Java-虚拟-线程任务中的新进展和技术细节。
下一篇
无影云桌面