MPLAB programing: Questions on USART initialization code
Do I need to declare variables like, URRH, URRL, UCSRB at the start of the program

These are likely to be pre-defined macros defined in a header file in the compiler library corresponding to the microcontroller you target. You have to find that header file and include it in your application code.

UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);
As I understand this, RXEN and TXEN are supposed to be 1 bit each, but
then how is the above expression valid

These should be pre-defined macros as well, which represent the bit positions of RXEN and TXEN bits in the register UCSRB.
The expression UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN) is used in the code to set the bits RXEN and TXEN in the register.
Suppose RXEN and TXEN are in the 0th and 1st bit positions, you have to write 0b00000011 to UCSRB register to enable both Receiver and Transmitter. The above expression does the same thing with shift operator and ORing, making it easy to read the intention of the code.
(1 &lt;&lt; RXEN)               --&gt; (1 &lt;&lt; 0) --&gt; 0b00000001
(1 &lt;&lt; TXEN)               --&gt; (1 &lt;&lt; 1) --&gt; 0b00000010
(1 &lt;&lt; RXEN) | (1 &lt;&lt; TXEN) ---------------&gt; 0b00000011

Alternatively you could also have done:
UCSRB |= (1 &lt;&lt; RXEN) ;
UCSRB |= (1 &lt;&lt; TXEN) ;

Setting the bits of a register without affecting/changing the status of other bits.