在 bash 脚本中执行系统命令 - 未找到命令

问题描述 投票:0回答:1

我有以下脚本: getip.sh

#!/bin/bash
int_ip_addr=`/sbin/ifconfig pppoe0 | grep 'inet addr:' | cut -d: -f2| cut -d' ' -f1`
pb_ip_addr=`curl ipinfo.io/ip`
echo "Internal IP Address is $int_ip_addr"
echo "External IP Address is $pb_ip_addr"
if [ "$int_ip_addr" == "$pb_ip_addr" ]; then
    echo "PPPoE IP is Public - $int_ip_addr"; 
else 
    echo "PPPoE IP is not Public - $int_ip_addr";
    disconnect interface pppoe0; connect interface pppoe0
fi

除了执行命令“断开接口 pppoe0;连接接口 pppoe0”之外,它运行良好

Disconnect 和 Connect 用 whereis 搜索都没有路径。这些命令在终端中使用它们时工作正常,但是一旦我将它们放入脚本中,我就会得到这个:

./tmp/getip.sh:第 10 行:断开连接:找不到命令 ./tmp/getip.sh:第 10 行:连接:找不到命令

我尝试分解这些命令,或者只是尝试单独执行它们,但由于某种原因,这些命令对于 bash 根本不可用。

这是来自 unify 的 USG-3P 路由器上的 Linux 文件系统。

这些命令用于断开和重新连接 PPPoE 接口。

整个脚本的目的是检查内部 PPPoE 接口 IP 是否与外部看到的 IP 匹配。这是一个测试,看看我是否获得了 CGNAT IP 或 PUBLIC IP。

我想使用脚本重新连接,直到获得公共 IP。

bash scripting command unify
1个回答
0
投票

我设法找到了罪魁祸首,看来该设备对这些命令有一些混淆保护,一些包装器之类的,我最终通过论坛找到了它。

这是脚本的最终版本,其中包含一个循环,该循环会重新连接,直到获得匹配的 IP 地址。

#!/bin/bash
int_ip_addr=`/sbin/ifconfig pppoe0 | grep 'inet addr:' | cut -d: -f2| cut -d' ' -f1`
pb_ip_addr=`curl ipinfo.io/ip`
echo "Internal IP Address is $int_ip_addr"
echo "External IP Address is $pb_ip_addr"
while [ "$int_ip_addr" != "$pb_ip_addr" ]; do
    echo "PPPoE IP is not Public - $int_ip_addr";
    /opt/vyatta/bin/vyatta-op-cmd-wrapper disconnect interface pppoe0; 
    /opt/vyatta/bin/vyatta-op-cmd-wrapper connect interface pppoe0;
    echo "Sleeping for 30 seconds"
    sleep 30s
    int_ip_addr=`/sbin/ifconfig pppoe0 | grep 'inet addr:' | cut -d: -f2| cut -d' ' -f1`
    pb_ip_addr=`curl ipinfo.io/ip`
    echo "Internal IP Address is $int_ip_addr"
done 
echo "PPPoE IP is Public - $int_ip_addr";
© www.soinside.com 2019 - 2024. All rights reserved.