如何阻止shell,直到“ipconfig up”完成

时间:2018-01-18 20:13:03

标签: bash wait ifconfig

我正在测试我正在使用的设备: “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

2 个答案:

答案 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

或者您需要以某种特定顺序运行的任何内容。