First Line of Script
#!/bin/bash → defines the shell interpreter
Comments
Common Elements
- Commands:
echo, cp, etc.
- Statements:
if, while, for
+x → make the script executable
- Use absolute path to run:
/home/userdir/myscript.bash
Variable Definition
a=hello
b=mytext
echo "text1 $a"
echo "text2 $b"
a=$(hostname)
echo $a # => myfirstlinux
Input / Output Variable
read myinputvariable
echo "name $myinputvariable"
If Else Statement
if [[ $count -eq 100 ]]; then
echo "count is 100"
else
echo "no"
fi
File Existence Check
if [[ -e /file.txt ]]; then
echo "file exists"
fi
Check If a Variable Matches a Value
a=$(date | awk '{print $1}')
if [[ "$a" == "Mon" ]]; then
echo "Today is $a"
else
echo "Today is not Monday"
fi
Check Multiple Values
if [[ "$a" == "Monday" ]] || [[ "$a" == "Tuesday" ]]; then
echo "It's early week"
fi
File Operation Tests
-s → file exists and is not empty
-f → file exists and is a regular file
-d → directory exists
-x → file is executable
-w → file is writable
-r → file is readable
Comparison Operators
-eq → equal (numeric)
= → equal (string)
-ne → not equal (numeric)
!= → not equal (string)
-lt → less than
-le → less than or equal
-gt → greater than
-ge → greater than or equal
$((...)) → arithmetic evaluation
For Loop Examples
for i in 1 2 3 4 5; do
echo "Welcome $i times"
done
for i in eat run jump play; do
echo "User $i"
done
for i in {1..5}; do
touch $i
echo "File $i created"
done
Indexed For Loop Example
i=1
for day in Mon Tue Wed Thu Fri; do
echo "Weekday $((i++)) : $day"
done
User Listing with For + AWK
i=1
for username in $(awk -F: '{print $1}' /etc/passwd); do
echo "Username $((i++)) : $username"
done
While Loop
c=1
while [[ $c -le 5 ]]; do
echo "Welcome $c times"
((c++))
done
Case Statement
echo "Choose function"
echo "A"
echo "B"
read choices # could also use: read -s password for silent input
case $choices in
A) date;;
B) ls;;
*) echo "Invalid choice";;
esac
Ping Check with Conditional
hosts="192.168.0.1"
ping -c1 $hosts &> /dev/null
if [[ $? -eq 0 ]]; then
echo "$hosts OK"
else
echo "$hosts NOT OK"
fi