Linux

用於檢查隧道是否存在的簡單 bash 腳本catching標準時間_out和d_標準時間_錯誤__C一種噸CH一世nGs噸d這在噸一種nds噸d和rrcatching stdout and stderr

  • August 3, 2021

我正在嘗試為 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

目前輸出為:

./check_tunnel.sh

tun1 已啟動

tun2 已啟動

tun3 已啟動

tun3 已啟動

tun4 已啟動

設備“tun5”不存在。

tun5 已啟動

Device "tun5" does not exist.列印到 stderr(標準錯誤)。

您的腳本僅擷取標準輸出(標準輸出)。

您可以將 stderr 重定向到 stdout 以解決問題(尾隨2>&1)。

OUT="$(ip a show $i up 2>&1)"

引用自:https://serverfault.com/questions/875507