Bash/shaare/GmmPhQ
First Line of Script
#!/bin/bash
→ defines the shell interpreter
Comments
- Use
#
for commenting
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
- Usage:
echo "text1 $a"
echo "text2 $b"
- Example:
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