这是我的第一个Bash脚本。我的Debian机器有WiFi问题。我不是来问原因的,而是如何在Bash的问题上贴创可贴。我的WiFi会在随机时间掉线,通常每12-15分钟一次。我在这台服务器上使用SSH,不想从物理服务器手动运行ifdown wlan0
和ifup wlan0
(重新连接WiFi)。
这个Bash脚本的功能是尝试连接三次。如果失败三次,它就会给予。否则,每隔三秒,它会通过尝试ping谷歌来检查我的服务器是否连接。
#!/bin/bash
ATTEMPTS=1
function test_connection {
ping -c 1 www.google.com
local EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]
then
return true
else
return false
fi
}
function reset_connection {
ifdown wlan0
ifup wlan0
EXIT_CODE=$((EXIT_CODE+1))
}
function connection_test_loop {
if [ $ATTEMPTS -ge 3 ]
then
echo CONNECTION FAILED TO INITIALIZE ... ATTEMPT $ATTEMPTS FAILED ... EXITING
exit
fi
if ! [ test_connection ]
then
echo CONNECTION DROPPED ... ATTEMPTING TO RE-ESTABLISH CONNECTION ... ATTEMPT $ATTEMPTS
reset_connection
fi
}
test_connection
if [ $? ]
then
echo CONNECTION PRE-ESTABLISHED
watch -n 3 connection_test_loop
else
echo CONNECTION FAILED TO INITIALIZE ... ATTEMPTING TO RESET CONNECTION ... ATTEMPT $ATTEMPTS
reset_connection
if [ $? ]
then
echo CONNECTION ESTABLISHED
watch -n 3 connection_test_loop
else
echo CONNECTION FAILED TO INITIALIZE ... ATTEMPT $ATTEMPTS FAILED ... EXITING
exit
fi
fi
我已经隔离了这个脚本的问题。它在于用watch
调用connection_test_loop
函数。我一直无法找到任何信息,为什么这不是按预期执行,每三秒运行一次函数。
3条答案
按热度按时间mi7gmzs61#
watch
可能不知道connection_test_loop函数。你可以尝试在test_connection下面添加一个**export
**来解决这个问题:http://linuxcommand.org/lc3_man_pages/exporth.html
调用
watch
时,可能需要以下语法:如果你的函数有一些参数,请确保你用引号括起函数调用和这些参数,例如:
70gysomp2#
我有多个别名和函数,它们过去不能与
watch
一起工作,直到我创建了一个像这样 Packagewatch
命令的函数,灵感来自@l'L 'l accepted answer:我在这里看到的唯一不方便的地方是,如果你想传递更多的watch参数,你不能传递更多的watch参数,当然我添加了
-n 0.2
标志,使它每0.2秒刷新一次,如果你有其他你想添加的标志,你需要提前在这里添加它们。就我个人而言,我只使用
fishshell
,所以我希望其他人没有被打破,不要犹豫,编辑答案,以修复命令!也作为经常使用手表的懒惰者的奖励:
alias w=watch
ppcbkaq53#
在@ I 'L'l的响应上,我写了这个代码,只是把所有函数导出到子shell,然后就收工了。注意,正则表达式需要这样声明的函数:
my_function ()
;当然,您可以根据需要对其进行定制(例如,I egrep -v所有与nvm
相关的函数)。