TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
THIRD ASSIGNMENT
1. Write a script to accept any number/by using command line argument and make menu
driven program for the following operations 1) Find Number is odd or Even 2) Find the
factorial of Number 3) Reverse the number 4) Check the number is palindrome or not 5)
Find the Number is Armstrong or not 6) Find the number is prime or not 7) Find the
number is positive, negative or zero 8) Sum of first and last digit 9) Display square and
cube 10) Exit
Ans =>
while true; do
echo "1) Find Number is odd or Even"
echo "2) Find the factorial of Number"
echo "3) Reverse the number"
echo "4) Check the number is palindrome or not"
echo "5) Find the Number is Armstrong or not"
echo "6) Find the number is prime or not"
echo "7) Find the number is positive, negative or zero"
echo "8) Sum of first and last digit"
echo "9) Display square and cube"
echo "10) Exit"
read -p "Enter your choice: " choice
case $choice in
1)
read -p "Enter the number: " number
if (( number % 2 == 0 )); then
echo "The number is even"
else
echo "The number is odd"
fi
;;
2)
P a g e 1 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
read -p "Enter the number: " number
factorial=1
for (( i=1; i<=number; i++ )); do
factorial=$(( factorial * i ))
done
echo "The factorial of $number is $factorial"
;;
3)
read -p "Enter the number: " number
reverse=""
while (( number > 0 )); do
digit=$(( number % 10 ))
reverse="$reverse$digit"
number=$(( number / 10 ))
done
echo "The reverse of $1 is $reverse"
;;
4)
read -p "Enter the number: " number
original=$number
reverse=""
while (( number > 0 )); do
digit=$(( number % 10 ))
reverse="$reverse$digit"
number=$(( number / 10 ))
done
if (( original == reverse )); then
echo "The number is a palindrome"
else
echo "The number is not a palindrome"
fi
P a g e 2 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
;;
5)
read -p "Enter the number: " number
original=$number
sum=0
while (( number > 0 )); do
digit=$(( number % 10 ))
sum=$(( sum + digit * digit * digit ))
number=$(( number / 10 ))
done
if (( original == sum )); then
echo "The number is an Armstrong number"
else
echo "The number is not an Armstrong number"
fi
;;
6)
read -p "Enter the number: " number
is_prime=1
for (( i=2; i<=number/2; i++ )); do
if (( number % i == 0 )); then
is_prime=0
break
fi
done
if (( is_prime == 1 )); then
echo "The number is prime"
else
echo "The number is not prime"
fi
;;
P a g e 3 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
7)
read -p "Enter the number: " number
if (( number > 0 )); then
echo "The number is positive"
elif (( number < 0 )); then
echo "The number is negative"
else
echo "The number is zero"
fi
;;
8)
read -p "Enter the number: " number
last_digit=$(( number % 10 ))
first_digit=$number
while (( first_digit >= 10 )); do
first_digit=$(( first_digit / 10 ))
done
sum=$(( first_digit + last_digit ))
echo "The sum of the first and last digit is $sum"
;;
9)
read -p "Enter the number: " number
square=$(( number * number ))
cube=$(( number * number * number ))
echo "The square of $number is $square"
echo "The cube of $number is $cube"
;;
10)
break
;;
*)
P a g e 4 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
echo "Invalid choice"
;;
esac
done
2 .Write a script to make following file and directory management operations menu
based: 1. Display current directory 2. List directory 3. Make directory 4. Change directory
5. Copy a file 6. Rename a file 7. Delete a file 8. Edit a file [Link] file [Link]
Ans =>
while true; do
echo "1) Display current directory"
echo "2) List directory"
echo "3) Make directory"
echo "4) Change directory"
echo "5) Copy a file"
echo "6) Rename a file"
echo "7) Delete a file"
echo "8) Edit a file"
echo "9) Move a file"
echo "10) Exit"
read -p "Enter your choice: " choice
case $choice in
1)
pwd
;;
2)
ls
;;
3)
read -p "Enter the directory name: " directory
P a g e 5 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
mkdir $directory
echo "Directory created successfully"
;;
4)
read -p "Enter the directory name: " directory
cd $directory
echo "Directory changed successfully"
;;
5)
read -p "Enter the source file name: " source
read -p "Enter the destination file name: " destination
cp $source $destination
echo "File copied successfully"
;;
6)
read -p "Enter the current file name: " current
read -p "Enter the new file name: " new
mv $current $new
echo "File renamed successfully"
;;
7)
read -p "Enter the file name: " file
rm $file
echo "File deleted successfully"
;;
8)
read -p "Enter the file name: " file
vi $file
;;
9)
read -p "Enter the source file name: " source
P a g e 6 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
read -p "Enter the destination directory: " destination
mv $source $destination
echo "File moved successfully"
;;
10)
break
;;
*)
echo "Invalid choice"
;;
esac
done
[Link] largest and smallest of three numbers.
Ans =>
read -p "Enter the first number: " num1
read -p "Enter the second number: " num2
read -p "Enter the third number: " num3
largest=$num1
smallest=$num1
if (( num2 > largest )); then
largest=$num2
fi
if (( num3 > largest )); then
largest=$num3
fi
if (( num2 < smallest )); then
smallest=$num2
P a g e 7 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
fi
if (( num3 < smallest )); then
smallest=$num3
fi
echo "The largest number is $largest"
echo "The smallest number is $smallest"
4 .Code for Shell script which whenever gets executed displays the message “Good
Morning/Good afternoon /Good Evening “depending on the time it get executed"
Ans =>
shell
#!/bin/bash
hour=$(date +%H)
if (( hour >= 0 && hour < 12 )); then
echo "Good morning"
elif (( hour >= 12 && hour < 18 )); then
echo "Good afternoon"
else
echo "Good evening"
fi
5 .Write a shell script to validate the name of a person accepted through the keyboard so
that it does not exceed 10 characters of length.
Ans =>
shell
#!/bin/bash
read -p "Enter your name: " name
if (( ${#name} > 10 )); then
echo "Name should not exceed 10 characters"
P a g e 8 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
else
echo "Name is valid"
fi
6. Write a shell script to test the file is executable or not.
Ans =>
shell
#!/bin/bash
read -p "Enter a filename: " filename
if [[ -x $filename ]]; then
echo "$filename is executable"
else
echo "$filename is not executable"
fi
7. Create a student file with roll number, name, marks1, marks2, and marks3. Insert five
records and perform the following tasks:
1. Display students who fail in marks2 only
2. Display student who has the maximum percentage
3. Display students who have a percentage between 50 and 60
4. Display all students in ascending order
Ans =>
shell
#!/bin/bash
echo "Roll Number,Name,Marks1,Marks2,Marks3" > [Link]
echo "1,Alice,80,30,70" >> [Link]
echo "2,Bob,70,60,80" >> [Link]
echo "3,Charlie,50,40,60" >> [Link]
echo "4,David,90,80,70" >> [Link]
echo "5,Eve,60,30,40" >> [Link]
P a g e 9 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
# Display students who fail in marks2 only
awk -F, '$4 < 40 && $5 >= 40 && $6 >= 40 { print }' [Link]
# Display student who has the maximum percentage
awk -F, '{ total=$3+$4+$5; percent=total/3; if (percent > max) { max=percent; name=$2 } } END { print
name, max }' [Link]
# Display students who have a percentage between 50 and 60
awk -F, '{ total=$3+$4+$5; percent=total/3; if (percent >= 50 && percent <= 60) { print } }' [Link]
# Display all students in ascending order
sort -t, -k2 [Link]
8. Write a shell script to create a file having student(id, name, class, percent) and perform
the following tasks:
1. Insert student details
2. Update student detail
3. Search student detail based on ID
4. Delete student based on ID
Ans =>
shell
#!/bin/bash
echo "ID,Name,Class,Percent" > [Link]
while true; do
echo "1) Insert student details"
echo "2) Update student detail"
echo "3) Search student detail based on ID"
echo "4) Delete student based on ID"
echo "5) Exit"
read -p "Enter your choice: " choice
P a g e 10 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
case $choice in
1)
read -p "Enter the ID: " id
read -p "Enter the name: " name
read -p "Enter the class: " class
read -p "Enter the percent: " percent
echo "$id,$name,$class,$percent" >> [Link]
echo "Record added successfully"
;;
2)
read -p "Enter the ID to update: " id
grep -q "^$id," [Link]
if (( $? == 0 )); then
sed -i "/^$id,/d" [Link]
read -p "Enter the new name: " name
read -p "Enter the new class: " class
read -p "Enter the new percent: " percent
echo "$id,$name,$class,$percent" >> [Link]
echo "Record updated successfully"
else
echo "Record not found"
fi
;;
3)
read -p "Enter the ID to search: " id
grep "^$id," [Link]
if (( $? != 0 )); then
echo "Record not found"
fi
;;
P a g e 11 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
4)
read -p "Enter the ID to delete: " id
grep -q "^$id," [Link]
if (( $? == 0 )); then
sed -i "/^$id,/d" [Link]
echo "Record deleted successfully"
else
echo "Record not found"
fi
;;
5)
break
;;
*)
echo "Invalid choice"
;;
esac
done
9. Write a script that reads [Link](Rno,Name,M1,M2,M3,Class) file and displays the
mark sheet in the following format [display data sorted by semester]:
SRNO|Rollno|Name|Marks1|Marks2|Marks3|Total|Percent|Grade
Ans =>
shell
#!/bin/bash
echo "Rno,Name,M1,M2,M3,Class" > [Link]
echo "1,Alice,80,30,70,1" >> [Link]
echo "2,Bob,70,60,80,1" >> [Link]
echo "3,Charlie,50,40,60,2" >> [Link]
echo "4,David,90,80,70,2" >> [Link]
echo "5,Eve,60,30,40,3" >> [Link]
P a g e 12 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
awk -F, '{ total=$3+$4+$5; percent=total/3; grade=percent>=60?"A":percent>=50?"B":"C"; print $1
"|" $2 "|" $3 "|" $4 "|" $5 "|" total "|" percent "|" grade }' [Link] | sort -t\| -k6rn
10. Write a shell script to input string using command line. Display total numeric,
uppercase, lowercase and special characters:
Ans =>
shell
#!/bin/bash
read -p "Enter a string: " string
numeric=$(echo $string | grep -o [0-9] | wc -l)
uppercase=$(echo $string | grep -o [A-Z] | wc -l)
lowercase=$(echo $string | grep -o [a-z] | wc -l)
special=$(echo $string | grep -o [^a-zA-Z0-9] | wc -l)
echo "Total numeric characters: $numeric"
echo "Total uppercase characters: $uppercase"
echo "Total lowercase characters: $lowercase"
echo "Total special characters: $special"
11. Consider [Link] is as follows Rollno: student_name: course: joining_date [in the
form dd-mm-yyyy]. Use this file and write a menu-driven script as follows:
Ans =>
shell
#!/bin/bash
while true; do
echo "1) Add record"
echo "2) Display all records"
echo "3) Sort student information as per their joining date"
echo "4) Sort student information on their name"
echo "5) Display all fields of [Link] having field separator |(pipe) instead of colon"
echo "6) Display name of student and their joining date"
P a g e 13 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
echo "7) Display student information course wise"
echo "8) Modify record"
echo "9) Delete record"
echo "10) Exit"
read -p "Enter your choice: " choice
case $choice in
1)
read -p "Enter the roll number: " rollno
read -p "Enter the student name: " name
read -p "Enter the course: " course
read -p "Enter the joining date (dd-mm-yyyy): " date
echo "$rollno:$name:$course:$date" >> [Link]
echo "Record added successfully"
;;
2)
cat [Link]
;;
3)
sort -t: -k4 [Link]
;;
4)
sort -t: -k2 [Link]
;;
5)
cat [Link] | tr ':' '|'
;;
6)
cut -d: -f2,4 [Link]
;;
P a g e 14 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
7)
cut -d: -f3 [Link] | sort | uniq -c
;;
8)
read -p "Enter the roll number to modify: " rollno
grep -q "^$rollno:" [Link]
if (( $? == 0 )); then
sed -i "/^$rollno:/d" [Link]
read -p "Enter the new student name: " name
read -p "Enter the new course: " course
read -p "Enter the new joining date (dd-mm-yyyy): " date
echo "$rollno:$name:$course:$date" >> [Link]
echo "Record modified successfully"
else
echo "Record not found"
fi
;;
9)
read -p "Enter the roll number to delete: " rollno
grep -q "^$rollno:" [Link]
if (( $? == 0 )); then
sed -i "/^$rollno:/d" [Link]
echo "Record deleted successfully"
else
echo "Record not found"
fi
;;
10)
break
;;
*)
P a g e 15 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
echo "Invalid choice"
;;
esac
done
12. Create a student file(rno,name,marks1,marks2,marks3). Perform the following task:
Ans =>
shell
#!/bin/bash
while true; do
echo "1) Insert record"
echo "2) Display all records"
echo "3) Display students who fail in marks2 only"
echo "4) Display student who has maximum percentage"
echo "5) Display students who have percentage between 50 and 60"
echo "6) Display all pass students in ascending order"
echo "7) Exit"
read -p "Enter your choice: " choice
case $choice in
1)
read -p "Enter the roll number: " rollno
read -p "Enter the student name: " name
read -p "Enter the marks1: " marks1
read -p "Enter the marks2: " marks2
read -p "Enter the marks3: " marks3
echo "$rollno:$name:$marks1:$marks2:$marks3" >> [Link]
echo "Record added successfully"
;;
2)
cat [Link]
P a g e 16 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
;;
3)
awk -F: '$4 < 40 && $5 >= 40 && $6 >= 40 { print }' [Link]
;;
4)
awk -F: '{ total=$3+$4+$5; percent=total/3; if (percent > max) { max=percent; name=$2 } } END
{ print name, max }' [Link]
;;
5)
awk -F: '{ total=$3+$4+$5; percent=total/3; if (percent >= 50 && percent <= 60) { print } }'
[Link]
;;
6)
awk -F: '{ total=$3+$4+$5; percent=total/3; if (percent >= 40 && $4 >= 40 && $5 >= 40) { print
} }' [Link] | sort -t: -k3
;;
7)
break
;;
*)
echo "Invalid choice"
;;
esac
done
13. Write a shell script which accepts a username and checks whether the entered user is
currently logged in or not:
Ans =>
shell
#!/bin/bash
read -p "Enter a username: " username
who | grep -q "^$username "
P a g e 17 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
if (( $? == 0 )); then
echo "$username is currently logged in"
else
echo "$username is not currently logged in"
fi
14. Code for Write a shell script that finds the total number of users and finds out how
many of them are currently logged in Unix:
Ans =>
shell
#!/bin/bash
total=$(cat /etc/passwd | wc -l)
logged_in=$(who | wc -l)
echo "Total number of users: $total"
echo "Number of users currently logged in: $logged_in"
15. Write a shell script which takes input of a filename and prints the first ten lines of that
file. The filename is to be passed as a command-line argument. If the argument is not
passed, then any C program from the current directory is to be selected (don’t
use head command)
Ans =>
shell
#!/bin/bash
if (( $# == 0 )); then
file=$(ls *.c | head -n1)
else
file=$1
fi
line_count=0
while IFS= read -r line; do
echo "$line"
P a g e 18 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
line_count=$(( line_count + 1 ))
if (( line_count == 10 )); then
break
fi
done < "$file"
16. Code for Shell script to perform operations like compare string, concatenate, find
length, occurrence of word in a string and reverse a string:
Ans =>
shell
#!/bin/bash
# Compare strings
string1="Hello"
string2="World"
if [[ $string1 == $string2 ]]; then
echo "Strings are equal"
else
echo "Strings are not equal"
fi
# Concatenate strings
concatenated="$string1 $string2"
echo "Concatenated string: $concatenated"
# Find length of a string
length=${#string1}
echo "Length of string1: $length"
# Occurrence of word in a string
string="This is a test string"
word="test"
P a g e 19 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
occurrences=$(grep -o -w "$word" <<< "$string" | wc -l)
echo "Occurrences of '$word' in the string: $occurrences"
# Reverse a string
reverse=$(rev <<< "$string")
echo "Reversed string: $reverse"
17. Code for Write a shell script to sort the given numbers in descending order using
Bubble sort:
Ans =>
shell
#!/bin/bash
numbers=(5 2 8 1 9 3)
n=${#numbers[@]}
for (( i=0; i<n-1; i++ )); do
for (( j=0; j<n-i-1; j++ )); do
if (( numbers[j] < numbers[j+1] )); then
temp=${numbers[j]}
numbers[j]=${numbers[j+1]}
numbers[j+1]=$temp
fi
done
done
echo "Sorted numbers in descending order:"
for (( i=0; i<n; i++ )); do
echo "${numbers[i]}"
done
P a g e 20 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
18. Write a script which reads a text file and output the following: Count of characters,
words, and lines. File in reverse. Frequency of a particular word in the file. Lower case
letter in place of upper case letter:
Ans =>
shell
#!/bin/bash
file="[Link]"
# Count of characters
characters=$(wc -m < "$file")
# Count of words
words=$(wc -w < "$file")
# Count of lines
lines=$(wc -l < "$file")
# File in reverse
reverse=$(tac "$file")
# Frequency of a particular word
word="example"
frequency=$(grep -o -w "$word" "$file" | wc -l)
# Lower case letter in place of upper case letter
lowercase=$(tr '[:upper:]' '[:lower:]' < "$file")
echo "Count of characters: $characters"
echo "Count of words: $words"
echo "Count of lines: $lines"
P a g e 21 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
echo "File in reverse:"
echo "$reverse"
echo "Frequency of '$word': $frequency"
echo "Lower case letter in place of upper case letter:"
echo "$lowercase"
19. Write a shell script to print numbers 1 to 20 in reverse and calculate the sum of odd
numbers:
Ans =>
shell
#!/bin/bash
sum=0
for (( i=20; i>=1; i-- )); do
echo "$i"
if (( i % 2 != 0 )); then
sum=$(( sum + i ))
fi
done
echo "Sum of odd numbers: $sum"
20. Write the menu-driven form which has the following options: Contents of
/etc/passwd, List of users who have currently logged in, Present working directory, Exit
(Quit):
Ans =>
shell
#!/bin/bash
while true; do
echo "1) Contents of /etc/passwd"
echo "2) List of users who have currently logged in"
P a g e 22 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
echo "3) Present working directory"
echo "4) Exit (Quit)"
read -p "Enter your choice: " choice
case $choice in
1)
cat /etc/passwd
;;
2)
who
;;
3)
pwd
;;
4)
break
;;
*)
echo "Invalid choice"
;;
esac
done
21. Write a shell script to find out how many files and directories are there in the current
directory and also list file and directory names separately:
Ans =>
shell
#!/bin/bash
file_count=$(find . -maxdepth 1 -type f | wc -l)
directory_count=$(find . -maxdepth 1 -type d | wc -l)
P a g e 23 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
echo "Number of files: $file_count"
echo "Number of directories: $directory_count"
echo "Files:"
find . -maxdepth 1 -type f -exec basename {} \;
echo "Directories:"
find . -maxdepth 1 -type d -exec basename {} \;
22. Code for Write a shell script that receives any number of filenames as arguments. The
shell script should check whether such files already exist:
Ans =>
shell
#!/bin/bash
for file in "$@"; do
if [[ -e $file ]]; then
echo "$file exists"
else
echo "$file does not exist"
fi
done
23. Write a shell script to input a filename and display the content of the file in a manner
that each line has only 10 characters. If a line in a file exceeds 10 characters, the remaining
characters should be printed on the next line:
Ans =>
shell
#!/bin/bash
read -p "Enter a filename: " filename
P a g e 24 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
while IFS= read -r line; do
while (( ${#line} > 10 )); do
echo "${lin[Link]}"
line="${line:10}"
done
echo "$line"
done < "$filename"
24. Write a shell script to display all words that have a length greater than N characters
from file N, and the filename must be passed from the command line (validation
required):
Ans =>
shell
#!/bin/bash
if (( $# != 2 )); then
echo "Usage: $0 <filename> <N>"
exit 1
fi
filename=$1
N=$2
while IFS= read -r word; do
if (( ${#word} > N )); then
echo "$word"
fi
done < "$filename"
25. A shell script that accepts two filenames as arguments, checks if the permissions for
these files are identical, and if the permissions are identical, output common permissions;
otherwise, output each filename followed by its permissions:
Ans =>
P a g e 25 | 26
TY-BCA-C UNIX SHELL SCRIPT Roll No :- 29
shell
#!/bin/bash
if (( $# != 2 )); then
echo "Usage: $0 <file1> <file2>"
exit 1
fi
file1=$1
file2=$2
permissions1=$(stat -c "%a" "$file1")
permissions2=$(stat -c "%a" "$file2")
if [[ $permissions1 == $permissions2 ]]; then
echo "Common permissions: $permissions1"
else
echo "$file1 permissions: $permissions1"
echo "$file2 permissions: $permissions2"
fi
P a g e 26 | 26