A login shell is one whose first character of argument zero is a -, or one started with the –login option. The Initialization is more comprehensive than in an normal interactive (sub) shell.
An interactive shell is one started without non-option arguments and without the -c option whose standard input and error are both connected to terminals (as determined by isatty(3)), or one started with the -i option. PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.
A non-interactive Shell is a shell in which the user can not interact with the shell. As en example, a shell running a script is always a non-interactive shell. All the same, the script can still access its tty.
Configuring a login shell
On logging in:
If '/etc/profile' exists, then source it. If '~/.bash_profile' exists, then source it, else if '~/.bash_login' exists, then source it, else if '~/.profile' exists, then source it.
For non-login interactive shells
On starting up:
If `~/.bashrc' exists, then source it.
For non-interactive shells
On starting up: If the environment variable ENV is non-null, expand the variable and source the file named by the value. If Bash is not started in Posix mode, it looks for BASH_ENV before ENV.
In Unix, files and directories beginning with a period usually contain settings for a specific program/a series of programs. Dot files are usually hidden from the user, so you would need to run
ls -a to see them.
An example of a dot file is
.bash_history, which contains the latest executed commands, assuming the user is using Bash.
shopt -q login_shell && echo 'login' || echo 'not-login'