Bash Scripting
Read user input
Storing her user input into name
variable
echo -n "Enter your name: "
read name
echo "You have entered: $name"
-n
flag in echo removes the carriage return
read -p 'username: ' user_name
echo "username is: $user_name"
-p
flag inread
will remove the carriage return
Hiding input
read -sp 'password: ' password
echo "Your password is: $password"
-sp
flag input is hidden
array variable
echo "Enter array names"
read -a names
echo "Names : ${names[0]}, ${names[1]}"
-a
flag indicates thenames
variable an array
array length
echo "The length : ${#names[@]}"
#name[@]
returns length of the array
Passing args
Accessing command line args passed to the script
echo "$0 $1 $2 $3"
Storing args in the array
echo 'storing args in the array'
args=("$@")
# Doesn't throw an error if only 2 args are sent 2,3,4 will be empty
echo ${args[0]} ${args[1]} ${args[2]} ${args[3]} ${args[4]}
Print all args
echo "To print all the args \"\$@\" $@"
Number of args
echo $#
If then elif
#!/bin/bash
echo "***This is if-then-else***"
echo
read -p 'Enter a value: ' var
echo you have entered $var
if [[ $var == 10 ]]
then
echo **The values are equal to 10
elif [[ $var == 100 ]]
then
echo ***The values are 100
elif [[ $var == "abcd" ]]
then
echo Checking \$var == $var
elif [[ $var -eq "Hello" ]]
then
echo Checking \$var -eq $var
else
echo Nothing is equal
fi
note
if [[ $var == 10 ]]
Space is needed after the open square bracket and before the closing square bracket
for loop in bash script
Basic for loop
Basic for loop in bash script
for (( expression; condition; expression))
do
command
done
The code below reads words at the command prompt into the names
array then loops through the array and prints the data from the array.
#!/bin/bash
# -a for array in read
echo "Enter array names"
read -a names
echo "Names : ${names[0]}, ${names[1]}"
echo "The length : ${#names[@]}"
for (( i=0; i<${#names[@]}; i++ ))
do
echo -n -e "${names[i]}\t"
done
for loop one-liner in bash
for i in `seq 1 3`; do echo "Hello ${i}"; done
output
Hello 1
Hello 2
Hello 3
for loop - network scan one-liner
Scan the network between the ip range ending with 192.168.84.100-200
with nc
for i in {100..200}; do nc -v -n -z -w 1 192.168.84.$i 443; done