Linux Shell Script and Command Line for Beginners

Introduction to Bash Scripting

Definition of Bash Scripting

A Bash script is a file containing a sequence of commands executed by the Bash program line by line. It allows you to automate tasks, such as navigating directories, creating files, or launching processes, by saving these commands in a script. Once created, you can execute the script to repeat the same sequence of steps multiple times.

Advantages of Bash Scripting

Bash scripting is a powerful tool for automating tasks in Unix/Linux systems. Here are some key benefits:

  1. Automation:
    • Automates repetitive tasks, saving time and reducing the risk of manual errors.
  2. Portability:
    • Scripts can run on various platforms, including Unix, Linux, macOS, and Windows (using emulators or virtual machines).
  3. Flexibility:
    • Highly customizable and can be combined with other programming languages or tools.
  4. Accessibility:
    • Easy to write and edit using any text editor. Most operating systems come with a built-in Bash interpreter.
  5. Integration:
    • Can be integrated with databases, web servers, and cloud services for complex automation tasks.
  6. Debugging:
    • Built-in debugging tools help identify and fix issues quickly.

Overview of Bash Shell and Command Line Interface

The terms “shell” and “Bash” are often used interchangeably, but they have subtle differences:

  • Shell: A program that provides a command-line interface for interacting with the operating system.
  • Bash (Bourne-Again SHell): A specific type of shell, commonly used in Unix/Linux systems and the default shell in many Linux distributions.

Shell Prompt

When using a shell interactively, the prompt looks like this:

[username@host ~]$
  • $ indicates a regular user.
  • # indicates the superuser (root).

Other Shells

Besides Bash, other shells include:

  • Korn shell (ksh)
  • C shell (csh)
  • Z shell (zsh)

You can check your current shell type using:

ps

How to Get Started with Bash Scripting

Running Bash Commands from the Command Line

Commands follow this syntax:

command [OPTIONS] arguments

Examples:

  1. date: Displays the current date and time.
    date
  2. pwd: Displays the present working directory.
    pwd
  3. ls: Lists the contents of the current directory.
    ls
  4. echo: Prints text or variable values to the terminal.
    echo "Hello, Bash!"

Use the man command to view a command’s manual:

man ls

Creating and Executing Bash Scripts

Script Naming Conventions

By convention, Bash scripts end with .sh, but this is not mandatory.

Adding the Shebang

The first line of a Bash script is the shebang:

#!/bin/bash

This tells the system to use the Bash interpreter. Find your Bash path using:

which bash

Creating Your First Bash Script

Create a file named run_all.sh:

vi run_all.sh

Add the following code:

#!/bin/bash
echo "Today is " date

echo -e "\nEnter the path to directory:"
read the_path

echo -e "\nYour path has the following files and folders:"
ls $the_path

Executing the Script

Make the script executable:

chmod u+x run_all.sh

Run the script:

./run_all.sh

Bash Scripting Basics

Comments

Comments start with # and are ignored by the interpreter:

# This is a comment

Variables and Data Types

Variables store data. Bash does not have data types; variables can hold numbers, strings, or characters.

Example:

name="Alice"
echo $name

Variable Naming Conventions

  • Start with a letter or underscore.
  • Can contain letters, numbers, and underscores.
  • Case-sensitive.
  • Avoid spaces and special characters.

Input and Output

  1. Reading User Input:
    echo "What's your name?"
    read name
    echo "Hello, $name!"
  2. Reading from a File:
    while read line
    do
      echo $line
    done < input.txt
  3. Command-Line Arguments:
    echo "Hello, $1!"

Basic Bash Commands

  • cd: Change directory.
  • mkdir: Create a directory.
  • touch: Create a file.
  • rm: Remove a file or directory.
  • cp: Copy a file or directory.
  • mv: Move or rename a file or directory.
  • cat: Display file contents.
  • grep: Search for patterns in files.

Conditional Statements

If/Else

if [[ condition ]]; then
  statement
elif [[ condition ]]; then
  statement
else
  statement
fi

Example:

echo "Enter a number:"
read num

if [ $num -gt 0 ]; then
  echo "$num is positive"
elif [ $num -lt 0 ]; then
  echo "$num is negative"
else
  echo "$num is zero"
fi

Looping and Branching

While Loop

i=1
while [[ $i -le 10 ]]; do
  echo $i
  (( i++ ))
done

For Loop

for i in {1..5}; do
  echo $i
done

Case Statements

case $variable in
  pattern1)
    statement
    ;;
  pattern2)
    statement
    ;;
  *)
    statement
    ;;
esac

Example:

fruit="apple"
case $fruit in
  "apple")
    echo "This is a red fruit."
    ;;
  "banana")
    echo "This is a yellow fruit."
    ;;
  *)
    echo "Unknown fruit."
    ;;
esac

Scheduling Scripts with Cron

Cron is a job scheduler in Unix-like systems. Use crontab to schedule scripts:

crontab -e

Example:

* * * * * /path/to/script.sh
  • The five * represent minute, hour, day, month, and weekday.

Debugging and Troubleshooting

  1. Enable Debugging:
    set -x
  2. Check Exit Codes:
    if [ $? -ne 0 ]; then
      echo "Error occurred."
    fi
  3. Use echo Statements:
    echo "Debug: Variable value is $variable"
  4. Exit on Error:
    set -e

Conclusion

Bash scripting is a versatile tool for automating tasks in Unix/Linux systems. By mastering basic commands, variables, loops, and conditionals, you can create powerful scripts to streamline your workflow. Scheduling scripts with cron and debugging them ensures efficient and error-free automation.