ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
So here we grep the ubiquitous ip tool's stdout for a line which contains both our interface of interest and the phrase "state UP" ( thanks to @Lekensteyn for pointing out the need for a little more specificity than just UP). We use the argument a as the short form for address and that should be enough to get a listing of all configured network cards in system.
One advantage to using ip could be that it really should be available everywhere - it is how I commonly configure my Android phone's network devices, for instance.
The :colons are used to avoid partial matches - in this way we guarantee a match for eth0 as opposed to an otherwise possible someothereth0 or eth007.
Thanks @RaphaelAhrens for nudging me toward correctness and explaining my solution.
EDIT:
To handle the current requirements you could:
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
The above will only print a CIDR ip address if your target $if is UP, plugged in, and has one. For ipv6 the solution is just as simple with only minor modification.
If you don't like sed you could achieve similar results with another |pipe ... grep and adding a -A context option to the first grep - but I like sed.
cat /sys/class/net/ | grep eth0should give you easilly parsable data. You could also dosudo ethtool eth0 | grep Link