Slide 1

advertisement
UNIX PROGRAMS & LOOPS
• #QUE:1 WRITE A UNIX SHELL SCRIPT TO
#DISPLAY THE TYPE OF SHELL THAT ARE
#CURRENTLY# LOGGED IN USER IS USING.IT
#SHOULD DISPLAY THE MESSAGE AS BELOW.
# <TYBCA - SEM 5>
echo $"user name:" $LOGNAME
echo $"Shell:" $SHELL
#QUE:2 WRITE A UNIX SHELL SCRIPT TO ACCEPT THE EMPLOYEE NAME FROM THE
USER AND DISPLAY APPROPRIATE MESSAGE.ASSUME EMPLOYEE IS WORKING
#ON A SINGLE PROJECT DETAILS ARE STORED IN FILE THE EMPLOYEE ARE
#STORE IN FILE
STATUS.DAT.# <TYBCA - SEM 5>
echo -e "Enter Name of the employee:\c"
read name
ecd=0
rm=0
if ecd=`grep "$name" project.dat | cut -d "|" -f 1`
then
dw=`grep "$ecd" struct.dat | cut -d "|" -f 3`
du=`grep "$ecd" project.dat | cut -d "|" -f 4`
else
echo -e "===Name Not Found===\n"
fi
if [ $dw -eq $du ] ; then
echo "$name,Today is the last day to finished your project"
else
rm=`expr $du - $dw` if [ $rm -le 30 ] ; then
echo "$name,Hurry! only $rm days are remaining to finish your project"
else
echo "$name,schedule yourself you have still $rm days to finish the job"
fi
fi
#QUE:3 WRITE A UNIX SHELL SCRIPT WHICH TAKES I/P A FILENAME AND
CHECKS IT TO SEE
# IF IT IS A ORDINARY FILE AND READABLE, IT CONTAINS SHOULD BE
DISPLAYED.
# <TYBCA - SEM 5>#
echo -e "Enter the file name: \c"
read fname
if [ -f $fname ]
then
if [ -$fname ]
then
cat $fname
fi
fi
#QUE:4 WRITE A UNIX SHELL SCRIPT TO FIND THE SUM OF FIRST N NUMBERS
WHERE N IS
# ACCEPTED FROM USER.
# e.g 1+2+3...+n
# <TYBCA - SEM 5>
#
echo -e "Enter the value of n: \c"
read n
sum=0
i=1
while [ $i -le $n ]
do
sum=`expr $sum + $i`
i=`expr $i + 1`
done
echo The sum is: $sum
QUE:5 WRITE A UNIX SHELL SCRIPT TO ACCEPT MARKS OF MATH,SCI,ENG AND
CALCULATE
# THE AVG OF MARKS AND DISPLAY THE MESSAGE.
# <TYBCA - SEM 5>
echo "Enter the marks of maths:"
read m
echo "Enter the marks of science:"
read s
echo "Enter the marks of english:"
read e
(( avg=($m+$s+$e)/3 ))
if [ $avg -gt 60 ]; then
echo "FIRST CLASS"
elif [ $avg -gt 50 ] && [ $avg -lt 60 ] then
echo "SECOND CLASS"
elif [ $avg -gt 40 ] && [ $avg -lt 50 ]
then
echo "THIRD CLASS"
else
echo "FAIL"
fi
#QUE:7 WRITE A UNIX SHELL SCRIPT WHICH PRINTS THE FOLLOWING:
# A)THE MESSAGE "TODAY IS:" WITH CURRENT DATE IN MM/DD/YY FORMAT.
# B)THE MESSAGE "NO OF USERS LOGGED IN:" WITH TOTAL NO OF CURRENT
#
LOGGED IN USERS.
# C)THE MESSAGE "PERSONAL STATUS:" WITH YOU OWN LOGNAME,TERMINAL
NUMBER,
#
DATA AND TIME OF LOGIN.
#
echo -e "Todays Date: \c" date +"%D"
echo " " echo -e "NO. of user currently logged on: \c"
who | wc -l
echo " "
echo -e "Personal information"
who am i -H
echo " "
#QUE:8 WRITE A UNIX SHELL SCRIPT THAT EXAMINES ALL THE NUMBERS FROM 1 TO
199
# DISPLAYING ALL THOSE WHICH THE SUM OF THE CUBES OF THE DIGITS EQUALS
# THE NUMBER ITSELT.
# <TYBCA - SEM 5>
echo The List of the digits.
i=1 while [ $i -le 999 ] do
no=$i
sum=0
while [ $no -gt 0 ]
do
(( j = no%10 ))
(( sum = sum + (j * j * j)))
((no = no / 10))
done
if [ $sum -eq $i ]
then
echo " "
echo $i
fi
((i = i + 1))
done
#QUE:9 WRITE A UNIX SHELL SCRIPT TO ACCEPT THE SALESMAN CODE FROM USER
AND THEN
# DISPLAY ALL THE ORDER NUMBERS AND ORDER AMT FOR THAT SALESMAN
CODE. ALSO
# DISPLAY THE TOTAL ORDER AMT
# <TYBCA - SEM 5>
echo -e "Enter salesman code: \c"
read scode
sum=0
echo Order no Order amount
grep "$scode" sales.dat | cut -f2,3
for i in `grep "$scode" sales.dat | cut -f3`
do
(( sum = sum + i))
done
echo -e "\nTotal amount: \c"
echo $sum
#QUE:11 WRITE A UNIX SHELL TO ADD RECORDS TO A FILE CALLED MATERIAL.DAT
#THE FIELD USING MATCODE,QTY,SOLD AND RATE.
#
<TYBCA - SEM 5>
mcode=`tail -1 mat.dat | cut -d"|" -f1`
echo -e "\nEnter the quntity of sold item: \c"
read qty
echo -e "\nEnter the amount: \c"
read amt
if [ $qty -lt 1 ] ; then
echo -e "\nQuantity should be greater then 0"
fi
if [ $amt -le 100 -o $amt -gt 10000 ]
then
echo -e "\nAmount must between 100 and 10000"
fi
(( mcode = mcode + 1 ))
echo "$mcode | $qty | $amt" >> mat.dat
#QUE:12 WRITE A UNIX SHELL SCRIPT WHICH ACCEPTS A CHOICE FOR THE USER AND
#
EXECUTE THE CORRESPONDING PROGRAMS USING CASE STRUCTURE. ASSUMING
#
THE PROGRAM AS (ADD,MODIGY & DELETE) ALREADY EXITS THE FORMAT OF THE
#
MENU IS
#
A -> ADDITION
#
M -> MODIFICATION FO RECORDS
#
D -> DELETION OF RECORDS
#
Q -> QUIT
#
<TYBCA - SEM 5>
echo 1. Addition of record
echo 2. Modify a record
echo 3. Deletion of record
echo 4. Quit
echo -e "Enter your choice: \c"
read ch
cat mat.dat
case "$ch" in
A) mcode=`tail -1 mat.dat | cut -d"|" -f1`
echo -e "\nEnter the quntity of sold item: \c"
read qty
echo -e "\nEnter the amount: \c"
read amt
(( code = mcode + 1 ))
echo "$code | $qty | $amt" >> mat.dat;;
M)
echo -e "\nWhich record u want to change?: \c"
read r
echo -e "\nEnter new quantity: \c"
read nqty
echo -e "\nEnter new rate: \c"
read nrate
sed ''$r' c\ $r' | '$nqty' | '$nrate'' mat.dat >ext
cat ext > mat.dat;;
D) echo -e "Enter record no: \c"
read rn
echo -e "Are you sure to delete this record?(Y or N): \c"
read cho
if [ $cho = 'Y' ]
then
sed ''$rn' d' mat.dat >ext
fi;;
Q)esac
echo -e "ENTER BOOK NAME:"
read bname
grep "$bname" book.dat
#QUE:14 WRITE A SHELL PROGRAM EHICH WILL WORK LIKE COMMAND
WC.
#
<TYBCA - SEM 5>
#
rd=0
terminal=/dev/pts/0
exec<$1
while read line
do
(( ln = ln + 1 ))
set $line
(( word = word + $# ))
done
echo "Total no. of lines: $ln"
echo "Total no of words: $word"
exec<$terminal
#QUE:16 WRITE A SHELL SCRIPTS TO COUNT NUMBER OF VOWELS IN FILE
#IIGNORING THE CASE.
#
<TYBCA - SEM 5>
#
echo -e "Enter a file name: \c"
read fname
tot=`wc -c < $fname`
count=0
while [ $tot -gt 0 ]
do
for ch in `cut -c $tot < $fname`
do
case $ch in
a|A)(( count = count + 1 ));;
e|E)(( count = count + 1 ));;
i|I)(( count = count + 1 ));;
o|O)(( count = count + 1 ));;
u|U)(( count = count + 1 ));;
esac
done
(( tot = tot - 1 ))
done
QUE:17 WRITE A SHELL SCRIPTS TO GENERATE RANDOM NUMBER.ALLOW USER TO GUESS 6
#
TIMES TO GET THE NO.PRINT APPROPRIATE MESSAGES AGTER EACH GUESS
#
RANDOM GENERATED IS 100 USERS ENTERS 98 MESG: TO SMALL
#
USER ENTERS 104 THE MESG TO BIG#
<TYBCA - SEM 5>
ctr=0
while true
do
s=`date "+%S"`
m=`date "+%M"`
let rn=s\*m
let ctr=ctr+1
echo -e "Enter your guess \c"
read gu
echo "Random Generated Is: $rn"
if [ $gu -gt $rn ] ; then
echo "Too Big"
elif [ $gu -lt $rn ] ; then
echo "Too Small"
else
echo "Equals"
fi
if [ $ctr -eq 5 ] ; then
exit
fi
done
# To Remove Directory and its subdirectory when user enters the name of
# directory
echo "Enter name of directory"
read dname
echo "This Will remove $dname and all the subdirectories below it"
echo -e "Enter y/n :\c"
read ch
if [ $ch == "n" -o $ch == "N" -o -z $dname ] ; then
exit 1
fi
cd $dname
while true ; do
for i in `ls` ; do
if [ -d $i ] ; then
dir="true"
dn=$i
break;
else
dir="false"
fi
done
if [ $dir == "true" ] ; then
cd $dn
else
for i in `ls` ; do
rm $i
done
ds=`pwd`
dn=${ds##*/}
cd ..
rmdir $dn
fi
if [ $dn == $dname ] ; then
break fi
done
QUE:19 WRITE A UNIX SELL SCRIPT THAT TAKES A LOGIN AS A COMMAND LING
#ARGUMENT AND REPORTS TO YOU WHEN THAT PERSON LOGS IN.HAVE IS SEND
#A GREETING TO THAT PERSONS EXPLAIN WHO WOULD YOU RUN SUCH A SHELL
#SCRIPT. <TYBCA - SEM 5>
if [ $ -lt 1 ]
then
echo -e "\nPlz. enter the username as command line argument"
exit
fi
lname=$1
while true
do
who | grep "$lname" > /dev/null
if [ $?=0 ]
then
echo -e "\n$lname is logged in"
echo -e "\n$lname logged in time: \c"
date "+%I":"%M"
echo "Welcome to the world of unix" | write $lname
exit
else
sleep 60
fi
done
#QUE:20 WRITE A SHELL SCRIPT THAT TAKES A COMMAND LINE I/P N AND A WORD. IT
#
THEN PRINTS THE WORD N TIMES,ONE WORD PER LINE.
#
<TYBCA - SEM 5>
i=0
while [ $i -lt $1 ]
do
echo $2
(( $i = $i + 1 ))
done
#QUE:21 WRITE A PROGRAM TO DISPLAY DATE IN DIFFERENT FORMAT ALONG WITH
TIME.
#
<TYBCA - SEM 5>
#
<ROLLNO - 27>
echo Today date and time in different format as foloows...
echo
date "+%A, %B %d, %Y, %I:%M:%S"
echo
date "+%d/%m/%y, %H:%M:%S"
echo date "+%a, %b, %d, %H:%M:%S, %p"
echo
date "+%D, %T"
echo
#QUE:22 WRITE A UNIX SHELL SCRIPT TO FIND SUM OF DIGIT AND CHECK THE
NUMBER
IS PALINDROM OR NOT. <TYBCA - SEM 5>
echo -e "Enter positive no: \c"
read no
if [ "$no" -le "0" ]
then
echo Plz. Enter a positive no
exit
fi
sum=0
count=0
base=1
(( no1 = no ))
while [ "$no" -gt "0" ]
do
(( sum = sum + (no % 10) ))
(( no = no / 10 ))
(( count = count + 1 ))
(( base = base * 10 ))
done
lin=0
k=0
(( no2 = no1 ))
(( i = i + 1 ))
echo -e "\nThe sum of digit is: $sum"
if [ test $no2 -eq $palin ]
then
echo -e "\nThe number is Palindrome"
else
echo -e "\nThe number is not Palindrome"
fi
#QUE:41 WRITE A SHELL SCRIPT TO ACCEPT THE NAME OF THE USER AS
#INPUT AND CHECK
#
OUT WHETHER THAT USER HAS LOG IN OR NOT.
#
<TYBCA SEM 5>
echo " enter the login name...:"
read ln
finger | cut -c 1-11 >q41.txt
if grep $ln q41.txt
then
echo "USER IS LOG IN"
else
echo "USER IS NOT LOG IN"
fi
##QUE26 TAKE 4 NUMERIC VALUES FROM THE USER & FIND OUT MAX
VALUE. WRITE A SHELL
#
SCRIPT FOR IT.
#
<TYBCA - SEM 5>
echo -e "\nEnter 4 numbers"
echo -e "\nEnter first no: \c"
read first
echo -e "\nEnter second no: \c"
read second
echo -e "\nEnter third no: \c"
read third
echo -e "\nEnter fourth no: \c"
read fourth
fs=0
tf=0
if [ $first -ge $second ]
then
(( fs = first ))
else
(( fs = second ))
fi
if [ $third -ge $fourth ]
if [ $third -ge $fourth ]
then
(( th = third ))
else
(( th = fourth ))
fi
if [ $fs -ge $th ]
then
echo -e "\n$fs is the greatest no"
else
echo -e "\n$th is the greatest no"
fi
#QUE:27 WRITE A SHELL SCRIPT TO DISPLAY THE
FOLLOWING INFORMATION.
#
YOUR LOGIN DIRECTORY IS <LOGIN DIR
NAME>
#
YOUR PRIMARY PROMPT IS <PRIMARY
PROMPT>
#
NOW CURRENT MONTH IS <MONTH>
#
FILES CAN BE EXECUTED AT <PATH>
#
<TYBCA - SEM 5>
#
<
echo "YOUR LOGIN DIRECTORY IS:" $HOME
echo "YOUR PRIMARY PROMPT IS:"
echo "NOW CURRENT MONTH IS:" `date +%B`
echo "FILES CAN BE EXECUTED AT:" $PATH
#QUE:29 WRITE A SHELL SCRIPT FOR ACCEPTING THE FOLLOWING
INFORMATION AND STORING
#
IT IN A FILE.
#
CASSATTE NO. MOVIE NAME. LANGUAGE. PRICE AND DATE OF
RELEASE.
#
<TYBCA - SEM 5>
#
<SEM - 27>
ans="y"
while [ $ans == "y" ]
do
echo "Enter the cassatte no:"
read cn
echo "Enter the Movie name:"
read mn
echo "Enter the language:"
read ln
echo "Enter the price:"
read p
echo "Enter the date or release:"
read dr
echo " $cn | $mn | $ln | $p | $dr ">>movie.dat
echo "Do you want to continue?[Y/N]"
read ans
done
# #QUE:31shell procedure to delete the specified record from
the
#
library file. It should accept a book number, check
whether it is
#
existing. If so, display the current details, ask for
confirmation
#
and then delete it from the file.
#
<TYBCA SEM 5>
clear
echo -n "ENTER NUMBER OF THE BOOK:="
read Bn
c=`grep -c "$Bn" lib1.txt`
if [ $c -gt 0 ]
then
grep "^$Bn" lib1.txt > list2
awk -F "|" '{ printf $1,$2,$3,$4,$5 }' list2
echo `grep $Bn lib1.txt`
echo "DO YOU WANT TO DELETE(Y OR N)?"
read ans
if [ $ans = 'y' -o $ans = 'Y' ]
then
echo "THE BOOK IS DELETED"
grep -v "^$Bn" lib1.txt > list1
mv list1 lib1.txt
else
echo "BOOK IS NOT DELETED"
fi
else
echo "FILE DOES NOT EXIST"
fi
# QUE:32 Write a shell scripts which finds the occurence of a given word from file
echo -n "ENTER THE FILENAME:="
read fn1
awk '
BEGIN
{
occ = 0
printf "\n ENTER THE WORD TO BE SEARCHED:="
getline wd < "/dev/tty"
printf "\n WORD IS:= %s",wd
}
{
i=0
split($0,ar," ")
while( i <= NF )
{
i = i+1
if (match(ar[i],wd))
occ++
}
}
END
{
printf "\n NO. OF OCCURENCE %d \n ",occ
}‘ $fn1
# #QUE:33 WRITE A SHELL SCRIPT TO FIND THE SQUARE ROOT OR A EN
NUMBER.
#
<TYBCA SEM 5>
echo "ENTER THE NO:"
read no
echo "The number is $no"
echo "sqrt($no)" | bc -l
##QUE:38 Write a shell scripts to accept a string in the command line and
#
reverse the same.
#
<TYBCA SEM 5>
echo $#
echo $* > q1
len=$(cat q1 |wc -c)
i=`expr $len - 1`
echo $i
m=" "
while [ $i -gt 0 ]
do
m1=$(cut -c $i q1)
echo $m1
m=`echo $m$m1`
let i=i-1
done
echo $m
rm q1
#QUE:39 Write a shell script to accept the number below 50 and display the
#
square of each this should continue as long as the user wishes.
ch='y'
while [ $ch = 'y' -o $ch = 'Y' ]
do
s=0
n=0
flag=0
while [ $flag -eq 0 ]
do
echo -n "ENTER THE NO:="
read n
if [ $n -lt 50 ]
then
flag=1
else
echo "NUMBER MUST BE LESS THEN 50"
fi
done
s=0
s=`expr $n \* $n`
echo "THE SQUARE OF $n IS:= $s"
echo "DO YOU WANT TO CONTINUE PRESS:= Y/N"
read ch
done
#QUE:40 Write a shell scripts to accept a name of user as input and check if
#
the same is present in /etc/passwd file.
#
<TYBCA SEM 5>
clear
echo "ENTER THE NAME OF USE TO CHECK IF IT PRESENT IN /etc/passwd"
read name
if [ -z $name ]
then
echo "YOU HAVE ENTER THE NULL STRING"
else
grep "$name" /etc/passwd && printf "FOUND" || echo "USER IS NOT
FOUND"
fi
#QUE:41 WRITE A SHELL SCRIPT TO ACCEPT THE NAME OF THE USER AS
INPUT AND CHECK OUT WHETHER THAT USER HAS LOG IN OR NOT.
#
<TYBCA SEM 5>
echo " enter the login name...:"
read ln
finger | cut -c 1-11 >q41.txt
if grep $ln q41.txt
then
echo "USER IS LOG IN"
else
echo "USER IS NOT LOG IN"
fi
Download