Hello Bytium

#!/usr/bin/bash
#This is Comment

echo "Hello Bytium"
printf "Hello Bytium"

Save as hello.sh , give it execute permission chmod +x hello.sh and run ./hello.sh

Parameters

#!/usr/bin/bash
#This is Comment

echo -e "Hello $1"
printf "Hey, how is it goin $1?"
echo ""

$1 is the first parameters, second parameters should be $2 and so on.

Variables

Variables used to store data to use in future by referencing to the variable name! There are 4 type of variable we can use in bash. We can’t use Reserved word for variable names. Reserved words are:

if    
then    
elif    
else    
fi    
time
for    
in    
until    
while    
do    
done
case    
esac    
coproc    
select    
function
{    }   
[[    ]]  
!
  1. Integer: These are numeric variables
  2. String: “Text based variable”
  3. Constant: “These variable Can’t be modified”
  4. Array: “Index of variable”

Integer Variable

#!/bin/bash

##Integer Variable
job=$3
name=$1

#Integer Variable
exp=5 

echo "$name having $exp+ experience in $job"
echo ""

String Variable

String variable is double quoted

#!/bin/bash

##String Variable
name="Bytium"
owner="Your name"

echo "The owner of $name is $owner"
echo "This is concated string: $name$owner"

Constant Variable

We can’t modify the variable. Two way to declare :

  1. Using declare -r
  2. Using readonly
##String Variable
readonly name="Bytium"

declare -r var="You"
var="Me"
readonly name2="Red Teaming"
name2="Blue Teaming"

echo $name2

echo $var

Execute in terminal and see the live result.

Array Variable

More details on Appropriate chapter

Internal Variables

$ echo $BASH
/usr/bin/bash

$ echo $BASH_SUBSHELL
0
$ echo $BASHPID #Process ID of current bash
46990

#Effective User ID
$ echo $EUID
1000

#Groups of current user
$ echo $GROUPS
1000

#Home directory of current user
$ echo $HOME
/home/Bytium

#Hostname
$ echo $HOSTNAME
debian

#Machine Type
$ echo $MACHTYPE
x86_64-pc-linux-gnu

#OLD Path
$ echo $OLDPWD
/home/Bytium

#OS Type
$ echo $OSTYPE
linux-gnu

#Binary Paths
$ echo $PATH
/home/Bytium/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin

#Current PROMPT
$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$

#Change Prompt
$ export PS1="Bytium$"
Bytium$

#Current Directory
$ echo $PWD
/home/Bytium

#User ID
$ echo $UID
1000

#Process ID of last command
$ echo $!

#Exit status of last command
$ echo $?
0

Command Substitutions

Two we can substitute command

  1. Using double backqoute “Command_Here
  2. Using $(Command_here)
##Using backquote
passwd=`cat /etc/passwd`

##Using $ sign with first bracket
shadow="$(cat /etc/shadow)" #Without root, permission denied
issue="$(cat /etc/issue)"

#display contents
echo $passwd 
echo $shadow
echo $issue

Operators

Here is the some list of commonly used operators

Operator Example Description
= variable=1, var2="Bytium" Assign Variable.
+,-,/,* var1=1;var1=2;var3=$((var1+var2)) Arithmetic Operator
+=, -=, *=, /= var+=1, var-=1, var*=2, var/=2 Increment by +1, Decrement by -1, Multiply by 2, divide by 2
& bitwish AND
! if [ ! -f $FILE] Not Operator
&& $condition1 && $condition2 And Operator
|| `$con1

Arrays

Bash support one-dimensional indexed. And the array index always start from 0. Way to declare an array:

  1. declare -a array_name
  2. Declare as variable but values in first brackets arr1=(One two three)
  3. Another way is declare -a array_name=(one two three)
#!/usr/bin/bash

#Array Variables
declare -a arr1
arr1=("One Two Three" "Two" "Three")
echo ${arr1[0]}

To reference the array we need to use ${array_name[number]}

Conditional

Conditional is a test. This mean, parametrically test for Fail and Success Status and divert the execution somewhere! Bash also has primary expression for conditional statements!

Primary Expression

Expression Description
-a file True if file exist
-b file True if file exist and a block file
-c file True if exist and it is a character special file
-d file True if it is a directory file
-e file True if file exist
-h file True if it is exist and a symbolic file
-k file True if it is exist and a sticky bit is set
-r file True if the file exist and Readable
-s file True if the file size is greater than 0
-w file True if File Exist and Writable
-x file True if File Exist and executable
-G file True if file exists and is owned by the effective group id.
-L file True if file exists and is a symbolic link.
-N file True if file exists and has been modified since it was last read.
-O file True if file exists and is owned by the effective user id.
-S file True if file exists and is a socket.
-z string True if the length of string is zero.
string1 == string2, string1 = string2 True if the strings are equal.
string1 != string2 True if the strings are not equal.
string1 < string2 True if string1 sorts before string2 lexicographically.
string1 > string2 True if string1 sorts after string2 lexicographically.
-eq Equal
-ne Not Equal
-le less than
-gt greater than

if/then

#!/usr/bin/bash

if [ $UID -ne 0 ]
then
        echo "Run as root!!!"

fi

if/then/else

#!/usr/bin/bash

if [ $UID -ne 0 ]
then
        echo "Run as root!!!"

else 
        echo "You are root"

if/then/elif/else

To catch elif the if condition need to be false

#!/usr/bin/bash

user=$UID

if [ $user -eq 0 ] #False
then
        echo "You are root!!!"

elif [ $user -eq 1000 ] #True. If false execute else statement
then
        warning=$(id -un $user)
        echo "Nice try Mr.$warning"

else 
        echo "You are dumb!!!"
fi

Loop

Example 1:

#!/usr/bin/bash

#First example
for i in {1..10}
do
    echo $i
done

Example 2:

#!/usr/bin/bash

#First example
for i in $(ls)
do
        t=`echo $i | grep ".old"`
        if [ $t ]
        then
                echo "Deleting $t"
                rm $t
        fi
done

Example 3:

#!/usr/bin/bash

#First example
for i in $(cat words)
do
        host $i.google.com | grep "has address"
done

Functions

#!/usr/bin/bash

echo -n "Word list: "

read words #Take input from users
target=$1 #Possitional Parameters

#Declare the Function
getip(){

for i in $(cat words)
do
        host $i.$target | grep "has address"
done

}

#Call the function
getip

Input/Output Redirections

Save to file

cat /etc/passwd|grep '/bin/bash'>active_user

Read from file

cat < words.txt

Redirect the output

cat /etc/passwd | grep '/bin/bash'

Regular Expression

System Commands

It is not finished yet!