使用bash在Ubuntu或Debian上获取IP地址信息(网关和子网)

时间:2015-07-22 00:14:37

标签: regex linux bash ubuntu awk

我正在尝试使用bash在Debian和Ubuntu系统上获取以太网或wifi适配器的IP地址。我可以使用ifconfig可靠地获取它,但它需要安装net-tools,现在已经弃用但它确实有效。

showip=$(ifconfig eth0 | awk -F"[: ]+" '/inet addr:/ {print $4}')

我使用ip route制作了一些东西,但它不能始终如一地工作,有时输出的行根据发行版和版本而不同

MAINIP=$(ip route | awk 'NR==3{print $9}')
GATEWAYIP=$(ip route | awk 'NR==1{print $3}')
SUBNET=$(ip route | awk 'NR==2{print $1}')

有没有办法使用正则表达式grep或awk来确保它有效?

2 个答案:

答案 0 :(得分:5)

你可以这样做:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell
    var btn : UIButton = cell.contentView.subviews[0] as! UIButton
    btn.addTarget(<#target: AnyObject?#>, action: <#Selector#>, forControlEvents: <#UIControlEvents#>)
    return cell
}

对于子网,您可以:

MAINIP=$(ip addr show dev eth0 | grep "inet" | awk 'NR==1{print $2}' | cut -d'/' -f 1)

对于GW:

SUBNET=$(ip route | grep "src $MAINIP" | awk '{print $1}')

答案 1 :(得分:0)

找出哪些适用于无线连接,而不仅仅是eth0(谢谢@ D.K。),只有MAINIP的调整。可能会有一种更好的方式或我忽略的东西。

MAINIP=$(ip route | grep src | awk '{print $9}')
GATEWAYIP=$(ip route | grep default | awk '{print $3}')
SUBNET=$(ip route | grep proto | grep -v default | awk '{print $1}')

SUBNET没有双重grep

SUBNET=$(ip route | awk '/proto/ && !/default/ {print $1}')