LEMONFELON
LEMONFELON

Reputation: 73

Using If-Else statement to check for output on Bash scripting

I would want the bash scripting to run the following command

iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000

if there is no output of it found using

iptables -t nat --list

How can I use the If-Else to look for the output. Can i use 'cat' ?

Upvotes: 0

Views: 172

Answers (2)

Eric Renouf
Eric Renouf

Reputation: 14490

You could use grep with the iptables list, depending on how you're trying to match it.

if iptables -t nat --list PREROUTING | grep -- '--destintation-port 80' | grep -q -- '--to-port 10000'
    iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000
fi

This will look if there is a PREROUTING entry that concerns both --destination-port 80 and --to-port 10000. If the output string is more predictable you could use a single grep for it, but I don't know iptables well enough to offer that as part of the solution

Upvotes: 2

James Ko
James Ko

Reputation: 34489

Use $() to capture the output of a command and -z to determine if it is empty:

output=$(iptables -t nat --list)
if [ -z $output ] # returns true if the length of $output is 0
then
    output=$(iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000)
fi

Upvotes: 2

Related Questions