Bash Scripting

Bash scripting must have/know tips.

Intro script

#!/bin/bash
# Hello World Bash Script
echo "Hello World!"
  • Line 1: #! is commonly known as the shebang and is ignored by the Bash interpreter. The second part, /bin/bash, is the absolute path to the interpreter, which is used to run the script. This is what makes this a “Bash script” as opposed to another type of shell script, like a “C Shell script”, for example.
  • Line 2: # is used to add a comment, so all text that follows it is ignored.
  • Line 3: echo “Hello World!” uses the echo Linux command utility to print a given string to the terminal, which in this case is “Hello World!”.

Results in:

./hello-world.sh
Hello World!

Special Bash variables

Variable Name Description
$0 The name of the Bash script
$1 - $9 The first 9 arguments to the Bash script
$# Number of arguments passed to the Bash script
[email protected] All arguments passed to the Bash script
$? The exit status of the most recently run process
$$ The process ID of the current script
$USER The username of the user running the script
$HOSTNAME The hostname of the machine
$RANDOM A random number
$LINENO The current line number in the scrip

Common test command operators

Operator Description: Expression True if…
!EXPRESSION The EXPRESSION is false.
-n STRING STRING length is greater than zero
-z STRING The length of STRING is zero (empty)
STRING1 != STRING2 STRING1 is not equal to STRING2
STRING1 = STRING2 STRING1 is equal to STRING2
INTEGER1 -eq INTEGER2 INTEGER1 is equal to INTEGER2
INTEGER1 -ne INTEGER2 INTEGER1 is not equal to INTEGER2
INTEGER1 -gt INTEGER2 INTEGER1 is greater than INTEGER2
INTEGER1 -lt INTEGER2 INTEGER1 is less than INTEGER2
INTEGER1 -ge INTEGER2 INTEGER1 is greater than or equal to INTEGER 2
INTEGER1 -le INTEGER2 INTEGER1 is less than or equal to INTEGER 2
-d FILE FILE exists and is a directory
-e FILE FILE exists
-r FILE FILE exists and has read permission
-s FILE FILE exists and it is not empty
-w FILE FILE exists and has write permission
-x FILE FILE exists and has execute permission
&& AND
|| OR

Reading user input

Prompting user for input and silently reading it using read.

  • -p - prompts the user to supply input, while the input is typed it is shown in the terminal
  • -sp - prompts the user to supply input, while the input is typed it is NOT shown in the terminal
#!/bin/bash
# Prompt the user for credentials
read -p 'Username: ' username
read -sp 'Password: ' password
echo "Thanks, your credentials are as follows: " $username " and " $password 

$ ./input2.sh
Username: crypt0rr
Password:
Thanks, your credentials are as follows: crypt0rr and HaveYouSeenMyPassword?

For Loop

$ for ip in $(seq 1 5); do echo 10.11.1.$ip; done 
10.11.1.1
10.11.1.2
10.11.1.3
10.11.1.4
10.11.1.5
$ for i in {1..5}; do echo 10.11.1.$i;done 
10.11.1.1
10.11.1.2
10.11.1.3
10.11.1.4
10.11.1.5

While Loop

#!/bin/bash
# while loop example
counter=1
while [ $counter -lt 6 ]
do
    echo "10.11.1.$counter"
    ((counter++))
done
./while.sh
10.11.1.1
10.11.1.2
10.11.1.3
10.11.1.4
10.11.1.5
#!/bin/bash
# while loop example 2
counter=1
while [ $counter -le 5 ]
do
    echo "10.11.1.$counter"
    ((counter++))
done

./while2.sh 10.11.1.1
10.11.1.2
10.11.1.3
10.11.1.4
10.11.1.5

Functions

Two methods of declaring functions.

function function_name {
commands...
}
function_name () {
commands...
}

URL list