Easily Find Bugs In Shell Scripts With ShellCheck

Brief: ShellCheck is a handy utility tool that warns you of possible syntax and simple logical errors, without executing. You can also use it with Atom text editor.

As we all know, the terminal is an inseparable part of the Linux system. And behind everything we do in the terminal, there is the shell — a program that interacts with the operating system itself. Every command we enter in the terminal is ultimately interpreted by the shell and then it acts accordingly.

ShellCheck command line tool

Shell as a Programming Language

There is more to shell though. A UNIX shell is not a command interpreter only, it serves as a programming language too! Shell as a programming language provides variables, flow control constructs, quoting and functions.

A file containing shell commands and codes is called Shell Script. So, you can accomplish various complex tasks and automation for you system using shell scripts.

Anyway, as we are humans, we make mistakes. So obviously, while writing shell scripts you will make mistakes too, such as – syntactical errors, typos, bad patterns etc. Here, we are going to know about the tool — ShellCheck — that will help us with that.


ShellCheck is a static analysis tool for you shell scripts. It is open-source and developed mainly for Bash or sh scripts. Now you might wonder, what the heck is Static Analysis? Well, static analysis is a method for debugging a program by examining its (static) codes rather than running/executing it.

Let’s take a look at what types of things ShellCheck checks for:

  • Quoting: Shell has specific ways for using variables and strings. If you’ve used them incorrectly ShellCheck will warn you.
  • Conditionals: It will check for incorrect uses of test statements.
  • Frequently Misused Commands: ShellCheck will warn you about incorrectly used shell commands.
  • Common Beginner’s Mistakes: Various syntax errors that beginner Shell users make as Shell uses various strict syntax rules that differ from other programming languages. For example: you can’t put spaces around the = sign while declaring variables. Most languages wouldn’t care but here it matters.
  • Style: ShellCheck will provide suggestions for improving your code’s style.
  • Data & Typing errors: Various issues related to data and typing.
  • Robustness, Portability & Others: ShellCheck will give suggestions for making your scripts robust, warn you about portability issues with different shells (bash,sh,ksh,dash etc.) and various other things.

For documentation and various useful information, do not forget to check the ShellCheck GitHub Project:

ShellCheck on GitHub

Installing ShellCheck

For offline usage, you can install ShellCheck package on your system. On Ubuntu, enter the following command in your terminal:

sudo apt install shellcheck

For other distributions, check the GitHub ReadMe Installing section.

If you use Atom text editor, you can also use ShellCheck within you editor window on-the-fly. Just install the necessary atom packages for ShellCheck:

apm install linter linter-shellcheck

ShellCheck supports other editors, such as – Vim, Emacs, Sublime etc., as well. You can find a complete list on the GitHub ReadMe section.

Using ShellCheck


You can use ShellCheck online without installing anything on your system (you will need a web browser though, haha!).

  • Copy your shell script’s codes.
  • Visit the ShellCheck website.
  • Paste your codes in the editor.
  • It will show the ShellCheck output.

Here’s an example:

Using ShellCheck Online
Using ShellCheck Online

Command-line interface

After installing the necessary packages for ShellCheck on your system, you can use it from your terminal without any net connectivity. Just type the following command:

shellcheck <filename>

Replace the <filename> part with the filename of your shell script.

ShellCheck Command-line interface
ShellCheck Command-line interface

Editor Extensions

After installing necessary extensions for your text editor, you can see the ShellCheck output on-the-fly, without running the shellcheck command manually. Here’s how it looks on the Atom editor:

Atom with Linter-ShellCheck
Atom with Linter-ShellCheck

Pros & Cons

Whether you are a seasoned Shell programmer or just a beginner, you have everything to gain and nothing to lose by using ShellCheck. Whenever you are writing shell scripts, check it with ShellCheck, you will be able to catch errors and bugs early and overall be more productive with Linux.

Have you ever tried to write a shell script before? Did you use ShellCheck? If you did, how was your experience? Do share with us! :)

0 (0)
Article Rating (No Votes)
Rate this article
There are no attachments for this article.
There are no comments for this article. Be the first to post a comment.
Full Name
Email Address
Security Code Security Code
Related Articles RSS Feed
CentOS / RHEL : Configure yum automatic updates with yum-cron service
Viewed 2634 times since Fri, Oct 26, 2018
12 Linux Rsync Options in Linux Explained
Viewed 9686 times since Wed, Oct 31, 2018
Tunnel SSH Connections Over SSL Using ‘Stunnel’ On Debian 7 / Ubuntu 13.10
Viewed 1347 times since Fri, Sep 28, 2018
RHEL: Services basic management - chkconfig
Viewed 3667 times since Sat, Jun 2, 2018
Sample logrotate configuration and troubleshooting part 2
Viewed 8214 times since Fri, Nov 30, 2018
RHCS6: Basic operations on clustered services
Viewed 1410 times since Sun, Jun 3, 2018
ZPOOL: Verify/change properties of a zpool
Viewed 1009 times since Sun, Jun 3, 2018
CentOS / RHEL : How to move a Volume Group from one system to another
Viewed 1516 times since Mon, Jan 28, 2019
How To Use Systemctl to Manage Systemd Services and Units
Viewed 5198 times since Mon, Dec 7, 2020
LVM: Reduce root PV/VG
Viewed 3414 times since Sat, Jun 2, 2018