/script if not buffed("Cat Form", 'player') then cast("Cat Form(Shapeshift)")end;
This one also works. Not sure if you need SuperMacro for this to work (doesn't matter because you need it anyways), for different forms just swap out "cat" with whatever form you're making a macro for.