There are two types of shell variables: built-in shell variables and user-defined shell variables. Built-in shell variables are created and maintained by the Linux system to define the environment and include variables like HOME, LOGNAME, and PATH. User-defined shell variables are created by users with the syntax variable_name=value and must follow naming conventions like starting with a letter or underscore. These variables can then be used within shell scripts.