CLI vs GUI
What Bash is, and why the terminal outlasts every graphical file manager
Bash (Bourne Again SHell) is a command-line interpreter — a program that reads the commands you type and executes them. Where a GUI trades flexibility for discoverability, a CLI trades a learning curve for speed, precision, and the ability to script anything you'd otherwise click through by hand.
Scripting is writing a sequence of shell commands into a file so they can be run repeatably, chained together, and automated — the difference between typing the same five commands every deploy and running one script.
Bash is the most common shell on Linux and macOS, but it's one of several: zsh, fish, dash, ksh, and tcsh are common Unix-family shells, while Windows brings cmd and PowerShell into the mix.
The Shell / Bash Roadmap
Work through these in order, from navigating a filesystem to administering a system
Setting Up Bash
The quality-of-life features that make working in the terminal fast instead of tedious.
Shell Fundamentals
The handful of commands you'll type hundreds of times a day.
Redirects & Pipelines
Wire the output of one command into the input of another — the core idea behind the shell.
Text Editors & Viewing
Read, search, and edit files without ever leaving the terminal.
Working with Text
Transform and analyze text streams — the bread and butter of shell one-liners.
Bash Script Anatomy & Variables
How a script is structured, run, and where its variables come from.
Bash Data Types & String Manipulation
Strings, numbers, and arrays — and the operations bash gives you for each.
Input / Output
Get data into a script and format what comes back out.
Operators & Script Arguments
Compare values, test files, and read what was passed in on the command line.
Conditionals, Loops & Exit Codes
Control flow, and how a script reports success or failure back to whatever called it.
Regular Expressions & Error Handling
Match patterns reliably, and make scripts fail loudly instead of silently.
Functions, Numerics & Debugging
Package up reusable logic, do math in a language with no native numeric type, and find what broke.
System Administration
Where shell scripting earns its keep — permissions, processes, monitoring, and scheduled work.
GitHub Projects
Real, buildable projects to put on your own GitHub
ShellCheck Source
Study the static analysis tool that catches common bash mistakes, then run it against your own scripts to build good habits early.
Bash-it Framework
Explore a community framework for bash aliases, functions, and plugins to see real-world patterns for organizing shell config.
Build Your Own Dotfiles
Use curated dotfiles repos as reference, then write your own install script that sets up aliases, functions, and environment variables.
Pure Bash Bible
Work through a collection of bash snippets that avoid external commands, to sharpen string manipulation and built-in operators.
Frequently Asked Questions
Common questions from people starting out with Shell / Bash
What's the difference between "shell" and "Bash"?
Shell is the general term for any command-line interpreter — Bash, zsh, fish, and dash are all shells. Bash (Bourne Again SHell) is simply the most common one on Linux and macOS, and the default many scripts assume.
Should I learn Bash or zsh?
Learn Bash first. It's the most portable — nearly every server, container, and CI pipeline has it — and scripts written for Bash mostly run under zsh too. zsh's extra interactive features are worth adopting for daily use once the fundamentals are solid.
Is shell scripting still relevant with modern automation tools?
Yes. Even the most modern CI/CD pipelines, Dockerfiles, and infrastructure tools ultimately shell out to run commands, and being able to read and write a bash script is close to a prerequisite for DevOps, backend, and Linux system administration work.
How do I debug a bash script?
Start with set -x to print each command as it runs, use bash -n to check syntax without executing, and run the script through shellcheck to catch common mistakes like unquoted variables before they cause problems.
Why do bash scripts fail silently?
By default, Bash keeps running a script even after a command fails. Adding set -e stops execution on the first error, set -u catches references to unset variables, and a trap can run cleanup logic when something goes wrong.
What's the difference between $* and $@?
Both expand to all the positional arguments passed to a script, but $@ preserves each argument as a separate word when quoted ("$@"), while $* joins them into a single string. In practice, "$@" is almost always the one you want.
Track complete
From navigating a filesystem to writing scripts with proper error handling and scheduling recurring jobs — that's the core of what's expected of anyone comfortable at the command line. Keep building, and pair it with Linux or DevOps to put it to work on real infrastructure.
Where next?
Keep exploring by domain or drill into a single skill