在shell脚本中获取IP地址的有效方法

时间:2010-03-02 08:25:24

标签: shell command-line scripting

上下文 在* nix系统上,可以用shell脚本获取机器的IP地址:

ifconfig | grep 'inet' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{print $1}'

或者也是这样:

ifconfig | grep 'inet' | grep -v '127.0.0.1' | awk '{print $2}' | sed 's/addr://'

问题: 是否有更简单,仍然可移植的方式来获取在shell脚本中使用的IP地址?

my apologies to *BSD and Solaris users as the above command may not work;我无法测试)

7 个答案:

答案 0 :(得分:12)

只需一个awk命令即可完成。不需要使用太多管道。

$ ifconfig | awk -F':' '/inet addr/&&!/127.0.0.1/{split($2,_," ");print _[1]}'

答案 1 :(得分:5)

你提供直接接口,从而减少一个grep。

ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{print $1}'

答案 2 :(得分:2)

基于this,您可以使用以下命令

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="my.package" >

    ...
    <application android:name=".MainApplication">
        ...
    </application>
</manifest>

答案 3 :(得分:1)

看这里在Beej指南为networking,以获得使用一个简单的C程序来打印出使用getaddrinfo(...)呼叫的IP地址的套接字的列表。这个简单的C程序可以在shell脚本的一部分被用来刚刚打印出可用的IP地址stdout这将是更容易做,然后依靠ifconfig如果你想保持便携的ifconfig的输出可能会有所不同。

希望这有帮助, 最好的祝福, 汤姆。

答案 4 :(得分:0)

  

ifconfig | grep&#39; broadcast \ | Bcast&#39; | awk -F&#39; &#39; {&#39;打印$ 2&#39;} |头-n 1 | sed -e&#39; s / addr:// g&#39;

答案 5 :(得分:0)

可能会有所帮助。

 more /etc/hosts | grep `hostname` | awk '{print $1}'

答案 6 :(得分:0)

# for bash/linux
ipaddr(){
if="${1:-eth0}"
result=$(/sbin/ip -o -4 addr show dev "${if}" | sed 's/^.*inet // ; s/\/...*$//')
printf %s "${result}"
tty -s  && printf "\n"
}