0% found this document useful (0 votes)
128 views32 pages

NP Record

A shell script is provided that implements the ls command using system calls in C. It accepts a directory name as an argument, opens the directory, reads the entries using readdir(), and prints the file/directory names, permissions, and other attributes by calling stat() on each entry. It checks the file size and permissions using the stat buffer returned from stat() and prints indicators like 'd' for empty files and 'r', 'w', 'x' for permissions.

Uploaded by

Ram Devineni
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
128 views32 pages

NP Record

A shell script is provided that implements the ls command using system calls in C. It accepts a directory name as an argument, opens the directory, reads the entries using readdir(), and prints the file/directory names, permissions, and other attributes by calling stat() on each entry. It checks the file size and permissions using the stat buffer returned from stat() and prints indicators like 'd' for empty files and 'r', 'w', 'x' for permissions.

Uploaded by

Ram Devineni
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 32

/* 1.

Write a shell script that accepts a file name, starting and ending line numbers as arguments and displays all the lines between the given line numbers. */

echo "enter the filename" readfname echo "enter the starting line number" read s echo "enter the ending line number" read n sed -n $s,$n\p $fname | cat > newline cat newline

1. Input :
jharvard@appliance (~/Desktop/Nplab): chmod 755 1.sh jharvard@appliance (~/Desktop/Nplab): sh 1.sh Enter the file name > 10.c Enter the starting line number> 1 Enter the ending line number> 10

1. Output :
#include<stdio.h> #include<fcntl.h> int main(int argc, char *argv[10]) { int source, destination, n; char buf[256]; if(argc!=3) { printf("No sufficient Arguments \n");

/* 2. Write a shell script that deletes all lines containing a specified word in one or more files supplied as arguments to it. */
if [ $# -eq 0 ] then echo "no arguments" else echo "enter a deleting word or char" read y fori in $* do grep -v "$y" "$i" > temp if [ $? -ne 0 ] then echo "pattern not found" else cp temp $i rm temp fi done fi

2. Input :
Chmod 755 2.sh Sh 2.sh 1.sh 2. Output : read fname read s read n sed -n $s,$n\p $fname | cat > newline cat newline
2

/*3. Write a shell script that displays a list of all the files in he current directory to which the user has read write and execute permissions. */

echo "enter the directory name" read dir if [ -d $dir ] then cd $dir ls > f exec < f while read line do if [ -f $line ] then if [ -r $line -a -w $line -a -x $line ] then echo "$line has all permissions" else echo "$line files not having all permissions" fi fi done fi

3. Input :
jharvard@appliance (~/Desktop/Nplab): chmod 755 3.sh jharvard@appliance (~/Desktop/Nplab): sh 3.sh enter the directory name Home

3. Output :
10.c files not having all permissions 3.sh has all permissions 4.sh has all permissions Sum.c files not having all permissions 3.sh: line 10: [: too many arguments XDG_VTNR=1 files not having all permissions a.out has all permissions core files not having all permissions f files not having all permissions file files not having all permissions file.sh has all permissions newline files not having all permissions

/* 4. Write a shell script that receives any number of file names as arguments checks if every argument supplied is file or a directory and reports accordingly. */
for x in $* do if [ -f $x ] then echo " $x is a file " echo " no of lines in the file are " wc -l $x elif [ -d $x ] then echo " $x is a directory " else echo " enter valid filename or directory name " fi done

4. Input :
jharvard@appliance (~/Desktop/Nplab): chmod 755 4.sh jharvard@appliance (~/Desktop/Nplab): sh 4.sh jharvard@appliance (~/Desktop/Nplab): sh 4.sh 2.sh 3.sh Home

4. Output :
2.sh is a file no of lines in the file are 39 2.sh 3.sh is a file no of lines in the file are 20 3.sh Home is a directory

/*5. Write a shell script that accepts a list of file names as its arguments, counts and reports the occurrence of each word that is present in the first argument file on other argument files. */
i=1 cnt=`wc -l wordfile | cut -c 6-7` echo $cnt cp wordfile filefor22 while [ $i -le $cnt ] do str=`head -1 filefor22` cnt1=`grep -c $str $1` echo $str $cnt1 ((c=$i+1)) tail +$c wordfile > filefor22 let i++ done

5.Output : chmod 755 5.sh $ cat wordfile apple mango banana $ cat wordfile1 apple chickoo apple banana $ sh27 wordfile1 3 apple 2
6

mango 0 banana 1

/*6. Write a shell script that accepts any number of arguments and prints them in reverse order . */
if [ $# -eq 0 ] then exit fi echo "no of arguments: $#" echo "the input arguments are" num=1

for i in "$@" do echo "arg$num is $i" num=`expr $num + 1` done

echo "arguments in reverse order" num=$# while [ $num -ne 0 ] do eval echo "arg$num is \$$num" num=`expr $num - 1` done

6.INPUT: sh 6.sh 6.OUTPUT:


no of arguments: 4 the input arguments are arg1 is arg1 arg2 is arg2 arg3 is arg3 arg4 is arg4
8

arguments in reverse order arg4 is arg4 arg3 is arg3 arg2 is arg2 arg1 is arg1

/*7. Write a shell script to find factorial of a given number*/


echo "Enter a number: " read num i=2 res=1 if [ $num -ge 2 ] then while [ $i -le $num ] do res=`expr $res \* $i` i=`expr $i + 1` done fi echo "Factorial of $num = $res"

7. Output :
chmod 755 fact.sh ./f.sh Enter a number: 5 Factorial of 5 is:120

10

/* 8. Write a shell script to find the G.C.D of two numbers */


echo -n "Enter First Number : " read n echo -n "Enter Second Number : " read m while [ $n -gt $m ] do if [ $n -gt $m ] then n=`expr $n - $m ` else m=`expr $m - $n ` fi done echo "Greates Common Divisor = " $n

Output :
Chmod 755 8.sh Sh 8.sh Enter the first number > 5 Enter the second number > 125 Greatest common divisor is 5

11

/*9 . Write a shell script to copy multiple files to a directory*/


iter=1 echo " Enter new Directory " read nn mkdir $nn echo " Enter umber of files > " read na while [ $iter -le $na ] do echo "Enter file name > " read fn cp $fn $nn iter=`expr $iter+1` done

Output :
jharvard@appliance (~/Desktop): chmod 755 11.sh jharvard@appliance (~/Desktop): sh 11.sh Enter new Directory navc Enter umber of files > 1 Enter file name > pc.c

12

/*10. Write a shell script to generate multiplication table*/


echo "enter the value of n:" read n i=1 for((i=1;i<=10;i++)) do echo " $n * $i = `expr $n \* $i`" done

Output :
jharvard@appliance (~/Desktop): chmod 755 10.sh jharvard@appliance (~/Desktop): sh 10.sh Multiplication Table > enter the value of n: 5 5*1=5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45 5 * 10 = 50

13

/* 11. Write a shell script that counts the number of lines and words present in a given file */

echo Enter the filename read file w=`cat $file | wc -w` c=`cat $file | wc -c` l=`grep -c "." $file` echo Number of characters in $file is $c echo Number of words in $file is $w echo Number of lines in $file is $l

Output :
jharvard@appliance (~/Desktop): sh 11.sh Enter the filename wordfile.docx Number of characters in wordfile.docx is 36719 Number of words in wordfile.docx is 692 Number of lines in wordfile.docx is 117

14

/* 12. Write a shell script that displays the list of all files in the given directory */
# !/bin/bash echo "enter directory name" read dir if [ -d $dir ] then echo "list of files in the directory" ls $dir else echo "enter proper directory name" fi

Output :
jharvard@appliance (~/Desktop): chmod 755 12.sh jharvard@appliance (~/Desktop): sh 12.sh enter directory name nav list of files in the directory 1.sh 2.sh 5.sh 8.sh

15

/* 13. Write a shell script that adds, substracts, multiplies, and divides the given two integers. */
input="y" while [[ $input = "y" ]] do echo "------------" echo "Calculator" echo "------------" PS3="Press 1 for Addition, 2 for subtraction, 3 for multiplication and 4 for Quotient 5 for Remainder: " select math in Addition Subtraction Multiplication Quotient Remainder do case "$math" in Addition) echo "Enter first no:" read num1 echo "Enter second no:" read num2 result=`expr $num1 + $num2` echo Answer: $result break ;; Subtraction) echo "Enter first no:" read num1 echo "Enter second no:" read num2 result=`expr $num1 - $num2` echo Answer: $result break ;; Multiplication) echo "Enter first no:" read num1 echo "Enter second no:" read num2 result=`expr $num1 * $num2` echo Answer: $result break ;; Quotient) echo "Enter first no:" read num1 echo "Enter second no:" read num2 result=$(expr "scale=2; $num1/$num2" | bc) echo Answer = $result break ;; Remainder) echo "enter the first no:"
16

read num1 echo "enter second no:" read num2 result=$(expr " $num1%$num2" | bc) echo Answer= $result break ;; *) echo Choose 1 to 5 only!!!! break ;; esac done echo "Do you want to calculate again(y/no):" read input echo "Thank you for using this program" done

Output :
calculator -----------1) Addition 3) Multiplication 5) Remainder 2) Subtraction 4) Quotient Press 1 for Addition, 2 for subtraction, 3 for multiplication and 4 for Quotient 5 for Remainder: 2 Enter first no: 3 Enter second no: 4 Answer: -1

17

/*14 .Write a C program that counts the number of blanks in a text file.( Using System calls )*/
using system calls. #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<fcntl.h> #include<sys/stat.h> main(intargc, char *argv[]) { int fd1; char buf[520]; intch,i,j=0; if(argc!=2) { printf("give filename as input"); exit(0); } else { fd1=open(argv[1],O_RDONLY ); while((ch=read(fd1,buf,512))>0) { for(i=0;i<ch;i++) if(buf[i]==' ') j=j+1; } printf("the no of blanks are : %d\n",j); } }

Output :
cse@cse-Veriton-M670:~/Desktop$ cc bla.c cse@cse-Veriton-M670:~/Desktop$ ./a.outls.c the no of blanks are : 8

18

/* 15. Write a C program that counts the number of blanks in a text file.( Using standard I/O) */
using standard I/O #include<stdio.h> #include<stdlib.h> #include<fcntl.h> main(intargc,char * argv[]) {

intch; inti=0; FILE *fp1; fp1=fopen(argv[1],"r"); if(fp1==NULL) { printf("file does not exist"); exit(1); } while((ch=getc(fp1))!=EOF) if(ch==' ') i=i+1; printf("the no of blank lines is %d",i); }

Output:
cse@cse-Veriton-M670:~/Desktop$ cc io.c cse@cse-Veriton-M670:~/Desktop$ ./a.outls.c the no of blank lines is 8

19

/*16. Implement the ls unix command using system calls in C */


#include<sys/stat.h> #include<dirent.h> #include<stdio.h> #include<time.h> int main(intargc, char *argv[]) { int t=1, done; DIR *dir; structdirent *ent; if(argc<3) { printf("The correct syntax is lsdirname\n"); exit(1); } if((dir=opendir(argv[2]))==NULL) // To check the existence of the directory { perror("Unable to open"); exit(0); } if(argc==3) { dir = opendir(argv[2]); while((ent = readdir(dir)) !=NULL) { printf("%s\t",ent->d_name); if(1) { struct stat sbuf; stat (ent->d_name,&sbuf); if(sbuf.st_size==0) //Check for empty file printf("d"); //Find out the permissions for files and directories if(sbuf.st_mode& S_IREAD) printf("r"); if(sbuf.st_mode& S_IWRITE) printf("w"); if(sbuf.st_mode& S_IEXEC) printf("x"); //Print the size printf("\t%l",sbuf.st_size); //Print the date and time of last modified printf("\t%s\n",ctime(&sbuf.st_ctime)); } } close(dir); } if(argc==2) { while((ent=readdir(dir)) !=NULL) printf("%s\n",ent->d_name);
20

} return(0); }

Output :
jharvard@appliance (~/Desktop): ./a.out The correct syntax is lsdirname

21

/* 17 .Write a C program to create a child process and allow the parent to display parent and the chil to display child on the screen. */
#include <stdio.h> #include <sys/types.h> #define MAX_COUNT 10 void ChildProcess(void); void ParentProcess(void); void main(void) { pid_tpid; pid = fork(); if (pid == 0) ChildProcess(); else ParentProcess(); } void ChildProcess(void) { inti; for (i = 1; i<= MAX_COUNT; i++) printf(" This line is from child, value = %d\n", i); printf(" *** Child process is done ***\n"); } void ParentProcess(void) { inti; for (i = 1; i<= MAX_COUNT; i++) printf("This line is from parent, value = %d\n", i); printf("*** Parent is done ***\n"); } /* child process prototype */ /* parent process prototype */

22

Output :
cse@cse-AcerPower-Series:~/Desktop$ gccparent.c cse@cse-AcerPower-Series:~/Desktop$ ./a.out This line is from parent, value = 1 This line is from parent, value = 2 This line is from child, value = 1 This line is from parent, value = 3 This line is from child, value = 2 This line is from parent, value = 4 This line is from child, value = 3 This line is from parent, value = 5 This line is from child, value = 4 This line is from parent, value = 6 This line is from child, value = 5 This line is from parent, value = 7 This line is from child, value = 6 This line is from parent, value = 8 This line is from child, value = 7 This line is from parent, value = 9 This line is from child, value = 8 This line is from parent, value = 10 This line is from child, value = 9 This line is from child, value = 10 *** Parent is done *** *** Child process is done ***

23

/* 18. Write a C program that illustrates how an orphan is created */


#include<stdio.h> #include<sys/types.h> #include<unistd.h> main() { int id; id=fork(); if(id==0) { printf("\nChild PID:%d\nChildPPid:%d\n", getpid(),getppid()); sleep(20); } else { printf("\nParent PID:%d\nParent PPID:%d\n", getpid(),getppid()); sleep(10); printf("Parent Terminated!!"); } }

Output :
cc orphan.c cse@cse-AcerPower-Series:~/Desktop$ ./a.out Parent PID:4847 Parent PPID:4769 Child PID:4848 Child PPid:4847 Parent Terminated!!

24

/*19. Write a C program that displays the real time of the day 10times */
#include <stdio.h> #include <sys/time.h> #include <sys/signal.h> /* Declarations */ void main(); int times_up(); void main() { int a; a=1;

for (; ;) { for (a; a<=10;a++) { times_up(1); } sleep(60); } }

int times_up(sig) int sig; { long now; long time(struct tms *ptr); char *ctime(); time (&now); printf("It is now %s\n", ctime (&now)); return (sig); }

Output :
jharvard@appliance (~/Desktop): ./a.out It is now Sun Mar 31 09:29:07 2013 It is now Sun Mar 31 09:29:07 2013 It is now Sun Mar 31 09:29:07 2013
25

It is now Sun Mar 31 09:29:07 2013 It is now Sun Mar 31 09:29:07 2013 It is now Sun Mar 31 09:29:07 2013 It is now Sun Mar 31 09:29:07 2013 It is now Sun Mar 31 09:29:07 2013 It is now Sun Mar 31 09:29:07 2013 It is now Sun Mar 31 09:29:07 2013

26

27

28

29

30

31

32

You might also like