我正在测试我正在使用的设备: “if-config lan1 up”并在检查后是否能够与“ethtool lan1”连接(使用if-config成功)。
但是在它起来之前它已经检查了LAN 1是否已连接,所以它告诉我它没有连接,即使如此,在一秒钟后它成功连接。 我可以让ethtool在检查连接之前等待“if-config up”完成或失败吗?我可以没有睡眠命令吗???? 我试过等,但它没有用
以下代码:
function ethernet_up_and_test(){
ifconfig $1 up
interface=$1
expected_link_speed=$2
interfaceName=$3
ethtool_response=`ethtool ${interface}`
link_detected=`echo -e "${ethtool_response}" | grep "Link detected:" | cut -d" " -f3`
if [ "x${link_detected}" != "xyes" ]; then
echo -e "*** ${interfaceName} - no link detected ***"
return -1
fi
actual_link_speed=`echo -e "${ethtool_response}" | grep "Speed:" | cut -d" " -f2`
if [ "x${actual_link_speed}" != "x${expected_link_speed}" ]; then
echo -e "link speed is: ${actual_link_speed}"
return -1
fi
echo -e "PASSED"
return 0
}
例如,它获得ethernet_up_and_test lan1 1000Mb / s LAN1
答案 0 :(得分:0)
ifconfig $1 up
返回时,界面不一定会启动,因此您需要等待系统完成配置的步骤。尝试定期轮询状态:
interface=$1
expected_link_speed=$2
interfaceName=$3
ifconfig "$interface" up
#Wait for the interface to come up.
sleep_int=.25 #Sleep interval on each loop
x="0" #Loop counter
iter="20" #Number of loops
link_detected=$(ethtool "$interface" | grep "Link detected:" | cut -d" " -f3)
while [[ "$link_detected" != "yes" && $x -lt $iter ]]
do
link_detected=$(ethtool "$interface" | grep "Link detected:" | cut -d" " -f3)
sleep $sleep_int
x=$((x + 1))
done
#Check if the link is there
if [[ "$link_detected" != "yes" ]]
then
echo -e "*** ${interfaceName} - no link detected ***"
return 1
fi
#... Do whatever after the interface is up
答案 1 :(得分:-1)
我不确定我是否理解正确,但你可以尝试用“&&”来链接你的命令,例如:
ifconfig eth0 up && apt-get update
或者您需要以某种特定顺序运行的任何内容。