Hello World

suggest change

Interactive Shell

The Bash shell is commonly used interactively: It lets you enter and edit commands, then executes them when you press the Return key. Many Unix-based and Unix-like operating systems use Bash as their default shell (notably Linux and macOS). The terminal automatically enters an interactive Bash shell process on startup.

Output Hello World by typing the following:

echo "Hello World"
#> Hello World  # Output Example


Non-Interactive Shell

The Bash shell can also be run non-interactively from a script, making the shell require no human interaction. Interactive behavior and scripted behavior should be identical – an important design consideration of Unix V7 Bourne shell and transitively Bash. Therefore anything that can be done at the command line can be put in a script file for reuse.

Follow these steps to create a Hello World script:

  1. Create a new file called hello-world.sh
touch hello-world.sh
  1. Make the script executable by running chmod+x hello-world.sh
  2. Add this code:
echo "Hello World"

Line 1: The first line of the script must start with the character sequence #!, referred to as shebang1. The shebang instructs the operating system to run /bin/bash, the Bash shell, passing it the script’s path as an argument.

E.g. `/bin/bash hello-world.sh`

Line 2: Uses the echo command to write Hello World to the standard output.

  1. Execute the hello-world.sh script from the command line using one of the following:

For real production use, you would omit the .sh extension (which is misleading anyway, since this is a Bash script, not a sh script) and perhaps move the file to a directory within your PATH so that it is available to you regardless of your current working directory, just like a system command such as cat or ls.

Common mistakes include:

  1. Forgetting to apply execute permission on the file, i.e., chmod +x hello-world.sh, resulting in the output of ./hello-world.sh: Permission denied.
  2. Editing the script on Windows, which produces incorrect line ending characters that Bash cannot handle.
A common symptom is `: command not found`  where the carriage return has forced the cursor to the beginning of line, overwriting the text before the colon in the error message.

The script can be fixed using the `dos2unix` program.

An example use: `dos2unix hello-world.sh`

*`dos2unix` edits the file inline.*
  1. Using sh ./hello-world.sh, not realizing that bash and sh are distinct shells with distinct features (though since Bash is backwards-compatible, the opposite mistake is harmless).
Anyway, simply relying on the script's shebang line is vastly preferable to explicitly writing `bash` or `sh` (or `python` or `perl` or `awk` or `ruby` or...) before each script's file name.

A common shebang line to use in order to make your script more portable is to use `#!/usr/bin/env bash` instead of hard-coding a path to Bash.  That way, `/usr/bin/env` has to exist, but beyond that point, `bash` just needs to be on your `PATH`.  On many systems, `/bin/bash` doesn't exist, and you should use `/usr/local/bin/bash` or some other absolute path; this change avoids having to figure out the details of that.

1 Also referred to as sha-bang, hashbang, pound-bang, hash-pling.

Feedback about page:

Optional: your email if you want me to get back to you:

Table Of Contents