1

i'm trying to write a simple bash script for a cronjob to check if some interfaces (tunnels) exsisting. if not i'd like to start another script that (re)starts them. my problem is: i don't get the "IF" working:

#!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

current output is:

./check_tunnel.sh

tun1 is up

tun2 is up

tun3 is up

tun3 is up

tun4 is up

Device "tun5" does not exist.

tun5 is up

Michael Hampton
  • 244,070
  • 43
  • 506
  • 972
Kjellson
  • 85
  • 6

1 Answers1

5

Device "tun5" does not exist. is printed to stderr (standard error).
Your script catches only stdout (standard output).

You may redirect stderr to stdout to fix the problem (trailing 2>&1).

OUT="$(ip a show $i up 2>&1)"
AnFi
  • 6,103
  • 1
  • 14
  • 27