Testing for the [pre-populated variables][1] is probably the only way to do this. But as you're asking for a single (global) var to test against, I believe you're looking for a way to have clean, dry code in your shared code block without using your posted snippet again and again.

How about doing something like this:

    {% set entry = entry is defined ?: null %}
    {% set category = category is defined ?: null %}

Then your two variables `entry` and `category` will always be defined, which allows you to have very short [ternary syntax][2] in your print expressions.

    <div class="myDefaultClass{{ entry ? ' myEntryClass' }}"></div>

Another thing you could do is to set a new var `model`, which holds either the Entry Model or the Category Model.

    {% set model = entry is defined ?: category is defined ?: null %}
    {% set entry = entry is defined ?: null %}
    {% set category = category is defined ?: null %}

    <h1>{{ model.title }}</h1>


  [1]: http://buildwithcraft.com/docs/routing
  [2]: http://twig.sensiolabs.org/doc/templates.html#other-operators