Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何做一个shell脚本来知道我的连接是否在ubuntu上_Shell_Grep - Fatal编程技术网

我如何做一个shell脚本来知道我的连接是否在ubuntu上

我如何做一个shell脚本来知道我的连接是否在ubuntu上,shell,grep,Shell,Grep,我对shell脚本非常不熟悉 如果我的连接断开了,我需要使用cron(这没有问题)。如果不是,我想调用一些脚本来重新连接 我正在考虑对某个站点(或ip)使用grep和ping,然后检查返回的字符串 然后调用我的命令: sudo pppd call speedtch 我需要线索谢谢!还是有更好的方法 由于我的呼叫需要sudo,因此有一种无需输入密码即可批量呼叫的方法?ping工作正常,请使用以下命令行: if ping -W 5 -c 1 google.com >/dev/null; th

我对shell脚本非常不熟悉

如果我的连接断开了,我需要使用cron(这没有问题)。如果不是,我想调用一些脚本来重新连接

我正在考虑对某个站点(或ip)使用grep和ping,然后检查返回的字符串

然后调用我的命令:

sudo pppd call speedtch
我需要线索谢谢!还是有更好的方法


由于我的呼叫需要sudo,因此有一种无需输入密码即可批量呼叫的方法?

ping工作正常,请使用以下命令行:

if ping -W 5 -c 1 google.com >/dev/null; then
    echo "Internet is up."
fi
这将使用以下命令行参数进行ping:

  • -W 5:等待五秒钟后的响应超时
  • -C1:只发送一个ping请求。大多数ping实现的默认设置是发送不受限制的包
  • 此外,ping的输出被重定向到/dev/null,以避免来自cron的无用邮件
至于你的sudo问题,你可以在sudoers文件中配置它

在sudo中使用以下行:

fromuser     ALL=(root) NOPASSWD: /usr/bin/mycommand
您需要替换以下字符串:

  • fromuser:替换为运行cronjob的用户
  • /usr/bin/mycommand:替换为要执行的命令的路径

通过此配置,用户“fromuser”将始终能够执行/usr/bin/mycommand,而无需输入密码。当然,出于安全原因,您需要小心操作。

ping工作正常,请使用以下命令行:

if ping -W 5 -c 1 google.com >/dev/null; then
    echo "Internet is up."
fi
这将使用以下命令行参数进行ping:

  • -W 5:等待五秒钟后的响应超时
  • -C1:只发送一个ping请求。大多数ping实现的默认设置是发送不受限制的包
  • 此外,ping的输出被重定向到/dev/null,以避免来自cron的无用邮件
至于你的sudo问题,你可以在sudoers文件中配置它

在sudo中使用以下行:

fromuser     ALL=(root) NOPASSWD: /usr/bin/mycommand
您需要替换以下字符串:

  • fromuser:替换为运行cronjob的用户
  • /usr/bin/mycommand:替换为要执行的命令的路径
通过此配置,用户“fromuser”将始终能够执行/usr/bin/mycommand,而无需输入密码。当然,出于安全原因,您需要小心操作。

如果您要测试的设备直接连接到internet,那么一种更快捷(被动)的方法是检查是否存在默认路由:

netstat -rn | grep '^default' && echo connection is up || echo connection is down netstat-rn | grep“^default”和&echo连接已打开| | echo连接已关闭 如果要检查脚本中的errorlevel:

#!/bin/sh netstat -rn | grep '^default' connected=$? if [ ! -z $connect ]; then echo connected; fi #!/垃圾箱/垃圾箱 netstat-rn | grep“^default” 已连接=$? 如果[!-z$connect];然后 回波连接; fi 我个人做的另一件事是等待连接

function wait_for_router() { el=1 while [ -z $el ]; do sleep 1 ping -c 1 $1 > /dev/null 2>&1 el=$? done } 函数wait_for_路由器(){ el=1 而[-z$el];则 睡眠1 ping-c 1$1>/dev/null 2>&1 el=$? 完成 } 如果在另一个脚本中包含此函数,则可以简单地执行以下操作:

#!/bin/sh echo Waiting for connection... wait_for_router 192.168.1.1 echo We have a connection... lets party #!/垃圾箱/垃圾箱 echo正在等待连接。。。 等待路由器192.168.1.1 我们有联系。。。让我们聚会 如果您正在测试的设备直接连接到internet,则一种更快(被动)的方法是检查是否存在默认路由:

netstat -rn | grep '^default' && echo connection is up || echo connection is down netstat-rn | grep“^default”和&echo连接已打开| | echo连接已关闭 如果要检查脚本中的errorlevel:

#!/bin/sh netstat -rn | grep '^default' connected=$? if [ ! -z $connect ]; then echo connected; fi #!/垃圾箱/垃圾箱 netstat-rn | grep“^default” 已连接=$? 如果[!-z$connect];然后 回波连接; fi 我个人做的另一件事是等待连接

function wait_for_router() { el=1 while [ -z $el ]; do sleep 1 ping -c 1 $1 > /dev/null 2>&1 el=$? done } 函数wait_for_路由器(){ el=1 而[-z$el];则 睡眠1 ping-c 1$1>/dev/null 2>&1 el=$? 完成 } 如果在另一个脚本中包含此函数,则可以简单地执行以下操作:

#!/bin/sh echo Waiting for connection... wait_for_router 192.168.1.1 echo We have a connection... lets party #!/垃圾箱/垃圾箱 echo正在等待连接。。。 等待路由器192.168.1.1 我们有联系。。。让我们聚会
你能给我解释一下吗?ping-w5-c1 google.com>/dev/null谢谢!我编辑了答案以包含使用的命令行选项。希望能有帮助。好的,再次感谢。。另一个问题:如果我的连接没有打开,那么
ping-w5-c1 google.com>/dev/null返回false?如果将所有输出发送到/dev/null,我不会向我解释如何检查“if”:(每个Unix命令都有一个退出状态。如果成功,则为0,否则为任何其他值。该退出状态是我们上面检查的,与标准输出无关。您的shell通常不显示命令的退出状态。有关详细信息,请参阅。您能解释一下吗?ping-W 5-c 1 google.com>/dev/null谢谢!I edited将答案包含在使用的命令行选项中。希望有帮助。再次感谢。另一个问题:如果我的连接没有打开,那么
ping-w5-c1 google.com>/dev/null;
返回false?如果将所有输出发送到/dev/null,我不会向我解释如何检查“if”:(每个Unix命令都有一个退出状态。如果成功,则为0,否则为任何其他值。该退出状态是我们上面检查的,与标准输出无关。shell通常不显示命令的退出状态。有关详细信息,请参阅。