Shell Programming Questions

1. Write a Shell Script that takes a search string and filename from the terminal & displays the results.
Ans. 
read a
read b
word=`grep $a $b`
if test `echo $word | wc -c` -eq 1
then
echo "Pattern not found"
else
grep $a $b
fi
 
2. Write a Shell Script that takes pattern and filename as command line arguments and displays the results appropriately i.e. pattern found/pattern not found.
Ans. 
if test $# -ne 2
then
echo "Invalid no. of arguments"
else
word=`grep $1 $2`
if test `$word|wc -c` -eq 1
then
echo "Pattern not found"
else
grep $1 $2
echo “Pattern Found”
fi
fi
 
3. Write a Shell Script that accepts only three arguments from the command line. The first argument is the pattern string, the second argument is the filename in which the pattern is to be searches and the third argument is the filename in which the result is to be stored.
Ans. 
if test $# -ne 3
then
echo "Invalid no. of arguments"
else
grep $1 $2 | cat > $3
if test -s $3
then
echo "Pattern found" cat $3
else
echo Pattern not found
fi
 
4. Write a Shell Script that accepts a filename as a command line argument andfinds out if its a regular file or a directory. If its a regular file, then performs varioustests to see if it is readable, writeable, executable etc.
Ans.
if [ -d $1 ]
then
echo Its a directory
elif [ -f $1 ]
then
echo file exist
if [ -r $1 ]
then
echo file has read permission
echo the contents are...
cat $1
else 
File dont have read permission
fi
if [ -w $1 ]
then
echo "\n"File have write permission
cat >> $1
else
echo you do not have write permission
fi
if [ -x $1 ]then
echo "\n"You have execute permission
else
echo you do not have Execute permission
fi
else
echo Nothing exist by this name
fi
 
5. Write a Shell Script which creates the following menu and prompts for choice from user and runs the chosen command.
Ans. 
echo Enter a choice.
echo 1. Todayś Dateecho 
2. Process of user echo 
3. List of filesecho 
4. Quit to unix
read ch
case $ch in
1)date;;
2)ps;;
3)ls;;
4)exit;;
*)echo invalid Choice
;;
esac
 
6. Write a Shell Script that computes the factorial of a given number.
Ans. 
echo "Enter the no. to compute it's factorial"
read num
i=1
fact=1
while test $i -le $num
do
fact=`expr $fact \* $i`
i=`expr $i + 1`
done
echo "Factorial of:$num is:$fact"
 
7. Write a Shell Script that works like a calendar reminding the user of certain things depending on the day of the week.
 
Ans :
a=`date +%A`
echo "\n" Welcome Shiva
echo "\n" Today is $a
echo Your tasks for today is as follows
case 
$a in Monday)
echo Complete Unix Assignments
;;
Tuesday)
echo Take print outs of Unix programs
;;
Wednesday)
echo Get your Unix practical file properly arranged;;
Thursday)
echo Get your Unix file checked
;;
Friday)
echo Get advance bookings for a movie
;;
Saturday)echo Go out for movie
;;
Sunday)Sunday is a fun day
;;
esac
 
8. Write a Shell Script that changes the extension of a group of files from txt to doc.
Ans. 
echo Before
ls *.txt
for i in `ls *.txt`
do
mv $i `echo $i|cut -f1 -d"."`.doc
done
echo After
ls *.doc
 
9. Write a Shell Script that accepts both filename and a set of patterns aspositional parameters to a script.
Ans :
fn=$1
shift
for i in $*
do
grep $i $fn
done
 
10. Write a Shell Script which will redirect the output of the date commandwithout the time into a file.
Ans :
echo Enter the file name
read file
a=`date|cut -b 1-11,25-28`
echo $a|tee -a $file
clear 
echo "\n"$file sucessfully created
echo "\n""Content of file is :"`cat $file`
 
11. Write a Shell Script (using while loop) to execute endlessly (until terminatedby user) a loop which displays contents of current directory, disk space status,sleep for 30 seconds and display the users currently logged in on the screen.
Ans :
char=y
while [ $char ="y" ]
do
ls
df -t
sleep 30
who
echo"Want to continue\(y/n\)?"
read char 
done
 
12. Write a Shell Script that receives two filenames as arguments. It shouldcheck whether content of the two files is same or not. If they are same, secondfile should be deleted.
Ans :
if [ -f $1 -a -f $2 ]
then
if diff $1$2
then
cat $1
echo "\n"cat $2
echo "\n" Contents are same Second file is being delete
drm $2
else
echo"\n" Contents are different
fi
else
echo "\n" File does not exist
fi
 
13. If a number is input through the keyboard, WASS to calculate sum of its digits.
Ans :
echo Enter a no.
read num
sum=0
while true
do
if test `expr $num % 10` -gt 0
then
temp=`expr $num % 10`
sum=`expr $sum + $temp`
num=`expr $num / 10`
else
echo $sum
exit
fi
 
14. Write a Shell Script that performs a count-down either from 10 (default) orfrom the value that is entered by the user.
Ans :
echo "Enter the Countdown time."
read n
clear 
while [ $n -ge 0 ]
do
echo $n
sleep 1
n=`expr $n - 1`
done
echo Count down timer stopped
 
15. Write a Shell Script which takes a command line argument of Kms and by defaultconverts that number into meters. Also provide options to convert km to dm and km to cm.
Ans :
km=$1
mt=`expr $km \* 1000`
echo "1.) km to dm"
echo "2 ) km to cm"
echo Enter your choice
read num
case 
$num in
1)dm=`expr $km \* 10000`
echo $km in meters is :$mt and in decimeters is : $dm;;
2)cm=`expr $km \* 100000`
echo $km in meters is :$mt and in centimeters is : $cm
;;
esac
 
16. Write a Shell Script using for loop, which displays the message "Welcome tothe UNIX System".
Ans :
for var in $*
do
echo "Welcome to Unix System"
shift 1
done
 
17. Write a Shell Script to change the filename of all files in a directory fromlower-case to upper-case.
Ans :
for i in *
do
mv $i `echo $i|tr "[:lower:]" "[:upper:]"`
done
 
18. Write a Shell Script that examines each file in the current directory. Fileswhose names end in old are moved to a directory named old files and files whosenames end in .c are moved to directory named cprograms.
Ans :
echo Before "\n"
ls -lmkdir oldfiles cprograms
for var in `ls`
do
if test $var = *old
then
echo "\n" File $var is moved to old files directory mv
$var old files
fi
if test $var = *.c
then
echo"\n" File $var is moved to cprograms directory mv
$var cprograms
fi
done
cd oldfiles
echo "\n" Files in oldfiles
ls -l
cd ..
echo "\n" After"\n"
ls -l
 
19. Write a Shell Script which searches all files in the given directory (to be taken as command line argument) for the file having the title (to be taken as command line argument), as the first line in the file.a) Display the contents of the searched file.b) In the end, print the the file is ###, where### is small-sized if total no. of lines is <50### is medium-sized if total no. of lines between 50&100 ### is large-sized.
Ans :
for i in `ls $dirnm`
do
f=`echo $1/$i`
if [ -f $f ]
then
if [ `cat $f|head -1` = $2 ]
then
cat $f if [ `cat $f|wc -l` -lt 50 ]
then
echo $i is small sized
fi
if [ `cat $f|wc -l` -ge 50 -a `cat $f|wc -l` -lt 100 ]
then
echo $i is a medium sized
fi
if [ `cat $f|wc -l` -gt 100 ]
then
echo $i is large sized
fi
fi
fi
done
 
20. Write a shell script which reports names and sizes of all files in a directory(directory would be supplied as an argument to the shell script) whose size isexceeding 1000 bytes. The filenames should be printed in descending order of their sizes. The total number of such files should also be reported.
Ans :
cd $1
mkdir tmp$1
for i in *
do
if [ -f $i ]
then
tmp=`ls -l $i|cut -f5 -d" "`
if [ $tmp -gt 1000 ]
then
ln $i tmp$1/$i
fi
fi
done
ls -lS tmp$1
echo Total number of such files is : `ls tmp$1|wc -w` rm
-r tmp$1
 
21. WASS for renaming each file in the directory such that it will have the current shellPID as an extension. The shell script should ensure that the directories do not get renamed.
Ans :
for var in `ls`
do
if test -f $var 
then
a=`echo $$`
mv $var $var.$a
fi
done
echo "\n" File name changed:"\n"
ls -l
 
22. WAP to calculate and print the first m Fibonacci numbers.
Ans :
echo Enter the series length
read num
x=0
y=1
if test $num -eq 1
then echo $x
else if test $num -eq 2
then echo "$x\n$y"
else
echo "$x\n$y"
i=3
while test $i -le $num
do
temp=`expr $y + $x`
x=$y
y=$temp
echo $y
i=`expr $i + 1`
done
fi
fi
 
23. WASS that will receive any number of filenames as arguments. The shell scriptshould check whether such files already exist. If they dothen it should bereported. The files that do not exist should be created in a sub-directory calledmydir. The shell script should first check whether the sub-directory mydir exists inthe current directory. If it doesn’t exist, then it should be created. If mydir alreadyexists, then it should be reported along with the number of files that are currentlypresent in mydir.
Ans :
if [ -e mydir ]
then
echo "Directory : mydir exist"
else
echo Do not exist
mkdir mydir 
fi
for a in $*
do
echo $a
then
echo "File does not exist "
else
echo “file d
touch $a
mv $a 
mydir fi
done
 
24. A shell script receives even number of filenames. Suppose four filenames aresupplied, then the first file should get copied into second file, the third file shouldget copied into fourth and so on. If odd number of filenames is supplied then nocopying should take place and an error message should be displayed.
Ans :
if [ `expr $# % 2` -ne 0 ]
then
echo Enter even number of parameters
else
i=0
for k in $*
do
i=`expr $i + 1`
if [ $i -eq 1 ]
then
temp1=$k 
fi
if [ $i -eq 2 ]
then
temp2=$k 
i=0
cp $temp1 $temp2 
fi 
done
fi
cat
 
25. WASS to identify all zero-byte files in the current directory and deletethem. Before proceeding with deletion, the shell script should get aconformation from the user.
Ans :
for i in *
do
if [ -e $i -a -f $i ]
then
if [ -s $i ]
then
echo
else
rm -i $i
fi
fi
done
 
26. WASS to compute the GCD and LCM of two numbers.
Ans :
echo Enter First number 
read n1
echo Enter Second number 
read n2
if [ $n1 -lt $n2 ]
then
i=$n1
else
i=$n2
fi
flag=0
while [ $flag -eq 0 ]
do
if [ `expr $n1 % $i` -eq 0 -a `expr $n2 % $i` -eq 0 ]
then
echo GCD of $n1 and $n2 is $i
flag=1
fi
i=`expr $i - 1`
done
 
27. Two numbers are entered through the keyboard. WAP to find the value of one number raised to the power of another.
Ans :
read b
echo Enter power 
read p 
powr=$p
result=1
while [ $p -ge 1 ]
do
result=`expr $result \* $b`
p=`expr $p - 1`
done
echo $b raised to the power $powr is $result
 
28. WASS that prompts the user for the password. The user has maximum of 3attempts. If the user enters the correct password, the message “CorrectPassword” is displayed else the message “Wrong Password”.
Ans :
echo Set the password first
read passw
i=0
while [ $i -lt 3 ]
do
echo Enter password
read p
if [ $p = $passw ]
then
echo Correct Password
i=3
else
echo Wrong password
i=`expr $i + 1`
fi
done
 
29. WASS that repeatedly asks the user repeatedly for the “Name of theInstitution” until the user gives the correct answer.
Ans :
flag=0
while [ $flag -eq 0 ]
do
echo Enter name of your institute in capital letters
read inst
if [ $inst = "AMITY" ]
then
echo Correct Answer 
flag=1
else
echo Enter Again
fi
done
 
30. WAP to generate all combinations of 1, 2 and 3 using for loop.
Ans :
for i in 1 2 3
do
for j in 1 2 3
do
for k in 1 2 3
do
echo $i$j$k 
done
done
done