用于检查隧道是否存在的简单 bash 脚本[捕获标准输出和标准错误]

Kje*_*son 1 linux bash interface

我正在尝试为 cronjob 编写一个简单的 bash 脚本来检查是否存在某些接口(隧道)。如果不是,我想启动另一个(重新)启动它们的脚本。我的问题是:我没有让“IF”工作:

#!bin/bash

for i in tun1 tun2 tun3 tun3 tun4 tun5
  do OUT="$(ip a show $i up)";

    if [[ $OUT == *"does not exist."* ]]; then
      echo "$i is down"
    else
      echo "$i is up"    
    fi

done
Run Code Online (Sandbox Code Playgroud)

当前输出为:

./check_tunnel.sh

tun1 已启动

tun2 已启动

tun3 已启动

tun3 已启动

tun4 已启动

设备“tun5”不存在。

tun5 已启动

AnF*_*nFi 5

Device "tun5" does not exist.打印到 stderr(标准错误)。
您的脚本仅捕获 stdout(标准输出)。

您可以将 stderr 重定向到 stdout 以解决问题(尾随2>&1)。

OUT="$(ip a show $i up 2>&1)"
Run Code Online (Sandbox Code Playgroud)