如何使脚本运行以设置以太网适配器的 IP 地址?

如何使脚本运行以设置以太网适配器的 IP 地址?

在 Ubuntu 22.04 上我有以下脚本

#!/bin/bash

INTERFACE="enx00e04c681730"
echo "Interface: $INTERFACE set to IP $1"

ifconfig $INTERFACE down
ifconfig $INTERFACE $1 netmask 255.255.255.0 up

它应该更改指定适配器的 IP 地址。在我设置执行标志后

 chmod ugo+x set_address.sh

我称之为

sudo ./set_address.sh 169.254.1.100

但给定接口的 IP 地址尚未更新。

当我手动运行命令时

 sudo ifconfig enx00e04c681730 down
 sudo ifconfig enx00e04c681730 169.254.1.100 netmask 255.255.255.0 up

运行正常。但脚本不行。

但如果我现在再次运行实际脚本,就像

sudo ./set_address.sh 192.168.200.100

然后它就可以正常工作了。

如何“修复”此问题,以便脚本即使不ifconfig首先运行命令也能正常工作?

答案1

您可以尝试下面的脚本,它在我的虚拟机上运行良好。

#!/bin/bash

INTERFACE="enx00e04c681730"
echo "Interface: $INTERFACE set to IP $1"

ip address flush dev $INTERFACE
ip address add $1/24 dev $INTERFACE
ip link set $INTERFACE up

答案2

脚本和运行脚本的方法看起来不错。如果手动命令过程有效但脚本无效,则存在一些与以下方面相关的问题关闭和恢复接口的时间。您可以尝试添加睡觉命令。这可能使系统有足够的时间完成向下操作,然后再继续向上操作。

#!/bin/bash
INTERFACE="enx00e04c681730"
echo "Interface: $INTERFACE set to IP $1"

sudo ifconfig $INTERFACE down
sleep 5  # Adding a 5 sec short delay to allow the interface to go down
sudo ifconfig $INTERFACE $1 netmask 255.255.255.0 up

您可以根据您的系统或特定要求调整睡眠时间。此外,确保分配的 IP 地址在同一个子网作为您正在连接的,并验证DHCP服务器没有将 IP 分配给另一台设备。

此外,在脚本中使用命令的完整路径是一种很好的做法。修改是否配置命令使用完整路径,如/sbin/ifconfig/usr/sbin/ifconfig,以避免脚本的任何潜在问题无法找到命令. 可以使用 找到命令的路径which ifconfig

相关内容