Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Cse-IV-unix and Shell Programming (10cs44) - Solution

Download as pdf or txt
Download as pdf or txt
You are on page 1of 57

Unix & Shell Programming

10CS44

UNIT 1 The Unix Operating System, The UNIX architecture and Command Usage,The File System
1 . Define an operating system.Discuss the salient features of UNIX Operating System. ( Dec.09/Jan.10, june/july2009 , Dec.08/Jan.09, December 2012 ) Soln: An operating system (OS) is a resource manager. It takes the form of a set of software routines that allow users and application programs to access system resources (e.g. the CPU, memory, disks, modems, printers, network cards etc.) in a safe, efficient and abstract way. Salient features of UNIX OS Several features of UNIX have made it popular. Some of them are: Portable UNIX can be installed on many hardware platforms. Its widespread use can be traced to the decision to develop it using the C language. Multiuser The UNIX design allows multiple users to concurrently share hardware and software Multitasking UNIX allows a user to run more than one program at a time. In fact more than one program can be running in the background while a user is working foreground. Networking While UNIX was developed to be an interactive, multiuser, multitasking system, networking is also incorporated into the heart of the operating system. Access to another system uses a standard communications protocol known as Transmission Control Protocol/Internet Protocol (TCP/IP). Organized File System UNIX has a very organized file and directory system that allows users to organize and maintain files. Device Independence UNIX treats input/output devices like ordinary files. The source or destination for file input and output is easily controlled through a UNIX design feature called redirection. Utilities UNIX provides a rich library of utilities that can be use to increase user productivity.

Dept of CSE,SJBIT

Page 1

Unix & Shell Programming

10CS44

2.Explain the architecture of the UNIX operating system.(Dec.09/Jan.10,Dec.08/Jan.09) Soln: The UNIX Architecture

UNIX architecture comprises of two major components viz., the shell and the kernel. The kernel interacts with the machines hardware and the shell with the user. The kernel is the core of the operating system. It is a collection of routines written in C. It is loaded into memory when the system is booted and communicates directly with the hardware. User programs that need to access the hardware use the services of the kernel via use of system calls and the kernel performs the job on behalf of the user. Kernel is also responsible for managing systems memory, schedules processes, decides their priorities. The shell performs the role of command interpreter. Even though theres only one kernel running on the system, there could be several shells in action, one for each user whos logged in. The shell is responsible for interpreting the meaning of metacharacters if any, found on the command line before dispatching the command to the kernel for execution. 3. Explain the following commands with examples: i) cat ; ii) rmdir; iii) pwd ( Dec.09/Jan.10, Dec.08/Jan.09 )

Soln: i) Cat to display the file contents & to create files $ Cat > list hello [Ctrl d ]

Dept of CSE,SJBIT

Page 2

Unix & Shell Programming


$ cat list Hello ii) rmdir - remove directory

10CS44

A directory needs to be empty before you can remove it. If its not, you need to remove the files first. Also, you cant remove a directory if it is your present working directory; you must first change out of that directory. You cannot remove a subdirectory unless you are placed in a directory which is hierarchically above the one you have chosen to remove. E.g. rmdir patch Directory must be empty Shows error as pis is not empty. However rmdir silently deletes the lower level subdirectories progs and data. iii) pwd - print working directory At any time you can determine where you are in the file system hierarchy with the pwd, print working directory, command, E.g.,: $ pwd /home/frank/src 4. Write a note on man documentation. And also give the usage of appros & whatis (june/july2009) SOLN: The man Documentation The man documentation is organized in eight (08) sections. Later enhancements have added subsections like 1C, 1M, 3N etc.) References to other sections are reflected as SEE ALSO section of a man page. When you use man command, it starts searching the manuals starting from section 1. If it locates a keyword in one section, it wont continue the search, even if the keyword occurs in another section. However, we can provide the section number additionally as argument for man command. For example, passwd appears in section 1 and section 4. If we want to get documentation of passwd in section 4, we use, $ man 4 passwd OR $ man s4 passwd (on Solaris)

rmdir pis pis/progs pis/data

apropos: lists the commands and files associated with a keyword. Example: $ apropos FTP

Dept of CSE,SJBIT

Page 3

Unix & Shell Programming


ftp ftpd ftp(1) in.ftpd(1m) -file transfer program -file transfer protocol server

10CS44

ftpusers

ftpusers(4) -file listing users to be disallowed ftp login privileges

whatis: lists one-liners for a command. Example: $ whatis cp cp cp(1) -copy files

5. what are the different types of files in UNIX (june/july2009, December 2012) SOLN: Types of files A simple description of the UNIX system is this: On a UNIX system, everything is a file; if something is not a file, it is a process. A UNIX system makes no difference between a file and a directory, since a directory is just a file containing names of other files. Programs, services, texts, images, and so forth, are all files. Input and output devices, and generally all devices, are considered to be files, according to the system. Most files are just files, called regular files; they contain normal data, for example text files, executable files or programs, input for or output from a program and so on. While it is reasonably safe to suppose that everything you encounter on a UNIX system is a file, there are some exceptions. Directories: files that are lists of other files. Special files or Device Files: All devices and peripherals are represented by files. To read or write a device, you have to perform these operations on its associated file. Most special files are in /dev. Links: a system to make a file or directory visible in multiple parts of the system's file tree. (Domain) sockets: a special file type, similar to TCP/IP sockets, providing interprocess networking protected by the file system's access control. Named pipes: act more or less like sockets and form a way for processes to communicate with each other, without using network socket semantics. Ordinary (Regular) File This is the most common file type. An ordinary file can be either a text file or a binary file.

Dept of CSE,SJBIT

Page 4

Unix & Shell Programming

10CS44

A text file contains only printable characters and you can view and edit them. All C and Java program sources, shell scripts are text files. Every line of a text file is terminated with the newline character. Directory File A directory contains no data, but keeps details of the files and subdirectories that it contains. A directory file contains one entry for every file and subdirectory that it houses. Each entry has two components namely, the filename and a unique identification number of the file or directory (called the inode number). When you create or remove a file, the kernel automatically updates its corresponding directory by adding or removing the entry (filename and inode number) associated with the file. Device File All the operations on the devices are performed by reading or writing the file representing the device. It is advantageous to treat devices as files as some of the commands used to access an ordinary file can be used with device files as well. Device filenames are found in a single directory structure, /dev. A device file is not really a stream of characters. It is the attributes of the file that entirely govern the operation of the device. The kernel identifies a device from its attributes and uses them to operate the device. 6. Compare internal and external commands in UNIX with suitable example. Explain why cd command cannot be an external command.( December 2012) SOLN: Some commands are implemented as part of the shell itself rather than separate executable files. Such commands that are built-in are called internal commands. If a command exists both as an internal command of the shell as well as an external one (in /bin or /usr/bin), the shell will accord top priority to its own internal command with the same name. Some built-in commands are echo, pwd, etc. You can change to a new directory with the cd, change directory, command. cd will accept both absolute and relative path names. Syntax cd [directory] Examples cd cd / cd .. changes to user's home directory changes directory to the system's root goes up one directory level

Dept of CSE,SJBIT

Page 5

Unix & Shell Programming


cd ../.. goes up two directory levels cd /full/path/name/from/root changes directory to absolute path named (note the leading slash) cd path/from/current/location changes directory to path relative to current location (no leading slash)

10CS44

UNIT 2 Basic File Attributes, the vi Editor

1. A files current permission are rw_r_xr_ _ specify the chmod expression required to change them for the following : i) rwx rwx rwx ; ii) r_ _ r_ _ _ _ _ ; iii) _ _ _ _ _ _ _ _ _ ; iv) _ _ _ r _ _ r_ _ using both the relative and absolute methods of assigning permission. (Dec.09/Jan.10 )

SOLN: . i) rwx rwx rwx Relative permissions chmod go+w, ug+x filename Absolute permissions chmod 777 filename ii) r_ _ r_ _ _ _ _ ; Relative permissions chmod u-w, g-x, o-r filename Absolute permissions chmod 440 filename iii) _ _ _ _ _ _ _ _ _ ; Relative permissions chmod ugo-r, u-w,g-x filename Absolute permissions chmod 000 filename

Dept of CSE,SJBIT

Page 6

Unix & Shell Programming


iv) _ _ _ r _ _ r_ _ Relative permissions chmod u-rw, g-x filename Absolute permissions chmod 044 filename 2. Explain briefly the file attributes listed using ls l command.(Dec.09/Jan.10, Dec.08/Jan.09, December 2012)

10CS44

SOLN : ls command is used to obtain a list of all filenames in the current directory. The output in UNIX lingo is often referred to as the listing. Sometimes we combine this option with other options for displaying other attributes, or ordering the list in a different sequence. ls look up the files inode to fetch its attributes. It lists seven attributes of all files in the current directory and they are: File type and Permissions Links Ownership Group ownership File size Last Modification date and time File name The file type and its permissions are associated with each file. Links indicate the number of file names maintained by the system. This does not mean that there are so many copies of the file. File is created by the owner. Every user is attached to a group owner. File size in bytes is displayed. Last modification time is the next field. If you change only the permissions or ownership of the file, the modification time remains unchanged. In the last field, it displays the file name.

For example, $ ls l total 72 -rw-r--r--rw-r--r--rw-rw-rw-rw-r--r-drwxr-xr-x drwxr-xr-x 1 kumar metal 19514 may 10 13:45 1 kumar metal 1 kumar metal 1 kumar metal 2 kumar metal 2 kumar metal 4174 may 10 15:01 84 feb 12 12:30 9156 mar 12 1999 chap01 chap02 dept.lst genie.sh helpdir progs

512 may 9 10:31 512 may 9 09:57

Dept of CSE,SJBIT

Page 7

UNIX

&

SHELL

PROGRAMMING

10CS44

Unix & Shell Programming

10CS44

3. what are the different modes of Vi editor ? explain with a diagram. (Dec.09/Jan.10, Dec.08/Jan.09, December 2012 ) SOLN: Input Mode Entering and Replacing Text It is possible to display the mode in which is user is in by typing, :set showmode Messages like INSERT MODE, REPLACE MODE, CHANGE MODE, etc will appear in the last line. Pressing i changes the mode from command to input mode. To append text to the right of the cursor position, we use a, text. I and A behave same as i and a, but at line extremes I inserts text at the beginning of line. A appends text at end of line. o opens a new line below the current line r<letter> replacing a single character s<text/word> replacing text with s R<text/word> replacing text with R Press esc key to switch to command mode after you have keyed in text Some of the input mode commands are: COMMAND i a I A o O r s S Saving Text and Quitting The ex Mode When you edit a file using vi, the original file is not distributed as such, but only a copy of it that is placed in a buffer. From time to time, you should save your work by writing the buffer contents to disk to keep the disk file current. When we talk of saving a file, we actually mean saving this buffer. You may also need to quit vi after or without saving the buffer. Some of the save and exit commands of the ex mode is:

Dept of CSE,SJBIT

Page 8

Unix & Shell Programming


Command :W :x :wq :w <filename> :w! <filename> :q :q! : sh :recover Action saves file and remains in editing mode saves and quits editing mode saves and quits editing mode save as save as, but overwrites existing file quits editing mode quits editing mode by rejecting changes made escapes to UNIX shell recovers file from a crash

10CS44

4. What is file permission ? what are the different ways of setting file permission? explain. (june/july2009, Dec.08/Jan.09) SOLN: File Permissions UNIX follows a three-tiered file protection system that determines a files access rights. It is displayed in the following format: Filetype owner (rwx) groupowner (rwx) others (rwx) For Example: -rwxr-xr-- 1 kumar metal 20500 may 10 19:21 chap02 rwx owner/user r-x group owner r-others

The first group has all three permissions. The file is readable, writable and executable b y the owner of the file. The second group has a hyphen in the middle slot, which indicates the absence of write permission by the group owner of the file. The third group has the write and execute bits absent. This set of permissions is applicable to others. You can set different permissions for the three categories of users owner, group and others. Its important that you understand them because a little learning here can be a dangerous thing. Faulty file permission is a sure recipe for disaster Changing File Permissions A file or a directory is created with a default set of permissions, which can be determined by umask. Let us assume that the file permission for the created file is -rw-r--r--. Using chmod

Dept of CSE,SJBIT

Page 9

UNIX

&

SHELL

PROGRAMMING

10CS44

Unix & Shell Programming

10CS44

command, we can change the file permissions and allow the owner to execute his file. The command can be used in two ways: In a relative manner by specifying the changes to the current permissions In an absolute manner by specifying the final permissions Relative Permissions chmod only changes the permissions specified in the command line and leaves the other permissions unchanged. Its syntax is: chmod category operation permission filename(s) chmod takes an expression as its argument which contains: user category (user, group, others) operation to be performed (assign or remove a permission) type of permission (read, write, execute) Category u - user g - group o - others a - all (ugo) Let us discuss some examples: Initially, -rw-r--r-chmod u+x xstart -rwxr--r-1 kumar metal 1906 sep 23:38 xstart 1 kumar metal 1906 sep 23:38 xstart operation + assign - remove = absolute permission r - read w - write x - execute

The command assigns (+) execute (x) permission to the user (u), other permissions remain unchanged. chmod ugo+x xstart chmod a+x xstart chmod +x xstart -rwxr-xr-x 1 kumar metal 1906 sep 23:38 xstart or or

Dept of CSE,SJBIT

Page 10

Unix & Shell Programming


chmod accepts multiple file names in command line chmod u+x note note1 note3 Let initially, -rwxr-xr-x 1 kumar metal 1906 sep 23:38 xstart

10CS44

chmod go-r xstart Then, it becomes -rwx--x--x 1 kumar metal 1906 sep 23:38 xstart

Absolute Permissions Here, we need not to know the current file permissions. We can set all nine permissions explicitly. A string of three octal digits is used as an expression. The permission can be represented by one octal digit for each category. For each category, we add octal digits. If we represent the permissions of each category by one octal digit, this is how the permission can be represented: Read permission 4 (octal 100) Write permission 2 (octal 010) Execute permission 1 (octal 001)

Octal 0 1 2 3 4 5 6 7

Permissions ----x -w-wx r-r-x rwrwx

Significance no permissions execute only write only write and execute read only read and execute read and write read, write and execute

We have three categories and three permissions for each category, so three octal digits can describe a files permissions completely. The most significant digit represents user and the least one represents others. chmod can use this three-digit string as the expression. Using relative permission, we have, chmod a+rw xstart

Dept of CSE,SJBIT

Page 11

Unix & Shell Programming


Using absolute permission, we have, chmod 666 xstart chmod 644 xstart chmod 761 xstart

10CS44

will assign all permissions to the owner, read and write permissions for the group and only execute permission to the others. 777 signify all permissions for all categories, but still we can prevent a file from being deleted. 000 signifies absence of all permissions for all categories, but still we can delete a file. It is the directory permissions that determine whether a file can be deleted or not. Only owner can change the file permissions. User can not change other users files permissions. But the system administrator can do anything. 5. With suitable example bring out the difference between absolute & relative pathname. (june/july2009, December 2012) SOLN: Absolute and relative paths A path, which is the way you need to follow in the tree structure to reach a given file, can be described as starting from the trunk of the tree (the / or root directory). In that case, the path starts with a slash and is called an absolute path, since there can be no mistake: only one file on the system can comply. Paths that don't start with a slash are always relative to the current directory. In relative paths we also use the . and .. indications for the current and the parent directory. The HOME variable When you log onto the system, UNIX automatically places you in a directory called the home directory. The shell variable HOME indicates the home directory of the user. E.g., $ echo $HOME /home/kumar What you see above is an absolute pathname, which is a sequence of directory names starting from root (/). The subsequent slashes are used to separate the directories. 6. what is a process. explain the mechanism of process creation. (june/july2009, Dec.08/Jan.09, December 2012) SOLN: Process Basics UNIX is a multiuser and multitasking operating system. Multiuser means that several people can use the computer system simultaneously

Dept of CSE,SJBIT

Page 12

Unix & Shell Programming

10CS44

1.Process-Id (PID) 2.The Parent PID (PPID) Interactive Batch Daemon The kernel is responsible for the management of the processes. It determines the time and priorities that are allocated to processes so that more than one process can share the CPU resources. Just as files have attributes, so have processes. These attributes are maintained by the kernel in a data structure known as process table. Two important attributes of a process are: 1. The Process-Id (PID): Each process is uniquely identified by a unique integer called the PID, that is allocated by the kernel when the process is born. The PID can be used to control a process. 2. The Parent PID (PPID): The PID of the parent is available as a process attribute. There are three types of processes viz.,

1. Interactive: Initiated by a shell and running in the foreground or background 2. batch: Typically a series of processes scheduled for execution at a specified point in time 3. daemon: Typically initiated at boot time to perform operating system functions on
demand, such as LPD, NFS, and DNS Mechanism of Process Creation There are three distinct phases in the creation of a process and uses three important system calls viz., fork, exec, and wait. The three phases are discussed below: Fork: A process in UNIX is created with the fork system call, which creates a copy of the process that invokes it. The process image is identical to that of the calling process, except for a few parameters like the PID. The child gets a new PID. Exec: The forked child overwrites its own image with the code and data of the new program. This mechanism is called exec, and the child process is said to exec a new program, using one of the family of exec system calls. The PID and PPID of the execd process remain unchanged. Wait: The parent then executes the wait system call to wait for the child to complete. It picks up the exit status of the child and continues with its other functions. Note that a parent need not decide to wait for the child to terminate. To get a better idea of this, let us explain with an example. When you enter ls to look at the contents of your current working directory, UNIX does a series of things to create an environment for ls and the run it:

The shell has UNIX perform a fork. This creates a new process that the shell will use to run the ls program.

Dept of CSE,SJBIT

Page 13

Unix & Shell Programming

10CS44

The shell has UNIX perform an exec of the ls program. This replaces the shell program and data with the program and data for ls and then starts running that new program. The ls program is loaded into the new process context, replacing the text and data of the shell. The ls program performs its task, listing the contents of the current directory. In the meanwhile, the shell executes wait system call for ls to complete. When a process is forked, the child has a different PID and PPID from its parent. However, it inherits most of the attributes of the parent. The important attributes that are inherited are: User name of the real and effective user (RUID and EUID): the owner of the process. The real owner is the user issuing the command, the effective user is the one determining access to system resources. RUID and EUID are usually the same, and the process has the same access rights the issuing user would have. Real and effective group owner (RGID and EGID): The real group owner of a process is the primary group of the user who started the process. The effective group owner is usually the same, except when SGID access mode has been applied to a file. The current directory from where the process was run. The file descriptors of all files opened by the parent process. Environment variables like HOME, PATH. The inheritance here means that the child has its own copy of these parameters and thus can alter the environment it has inherited. But the modified environment is not available to the parent process.

UNIT 3 The Shell, The Process, Customizing the environment


1. List out the standard file types & directories in UNIX file system.(Dec.09/Jan.10) SOLN: The UNIX File System The root directory has many subdirectories. The following table describes some of the subdirectories contained under root. Directory /bin /dev /etc /home /lib /sbin Content Common programs, shared by the system, the system administrator and the users. Contains references to all the CPU peripheral hardware, which are represented as files with special properties. Most important system configuration files are in /etc, this directory contains data similar to those in the Control Panel in Windows Home directories of the common users. Library files, includes files for all kinds of programs needed by the system and the users. Programs for use by the system and the system administrator.

Dept of CSE,SJBIT

Page 14

UNIX

&

SHELL

PROGRAMMING

10CS44

Unix & Shell Programming


/tmp /usr /var

10CS44

Temporary space for use by the system, cleaned upon reboot, so don't use this for saving any work! Programs, libraries, documentation etc. for all user-related programs. Storage for all variable files and temporary files created by users, such as log files, the mail queue, the print spooler area, space for temporary storage of files downloaded from the Internet, or to keep an image of a CD before burning it.

2. what are standard input,output and errors?Explain with respect to unix? (Dec.09/Jan.10, june/july2009) SOLN: The three standard files The shell associates three files with the terminal two for display and one for the keyboard. These files are streams of characters which many commands see as input and output. When a user logs in, the shell makes available three files representing three streams. Each stream is associated with a default device: Standard input: The file (stream) representing input, connected to the keyboard. Standard output: The file (stream) representing output, connected to the display. Standard error: The file (stream) representing error messages that emanate from the command or shell, connected to the display. The standard input can represent three input sources: The keyboard, the default source. A file using redirection with the < symbol. Another program using a pipeline. The standard output can represent three possible destinations: The terminal, the default destination. A file using the redirection symbols > and >>. As input to another program using a pipeline. A file is opened by referring to its pathname, but subsequent read and write operations identify the file by a unique number called a file descriptor. The kernel maintains a table of file descriptors for every process running in the system. The first three slots are generally allocated to the three standard streams as, 0 Standard input 1 Standard output 2 Standard error

Dept of CSE,SJBIT

Page 15

Unix & Shell Programming


These descriptors are implicitly prefixed to the redirection symbols. Examples:

10CS44

Assuming file2 doesnt exist, the following command redirects the standard output to file myOutput and the standard error to file myError. $ ls l file1 file2 1>myOutput 2>myError To redirect both standard output and standard error to a single file use: $ ls l file1 file2 1>| myOutput 2>| myError OR $ ls l file1 file2 1> myOutput 2>& 1 3. What is process status ? Exaplin PS command with option ? (Dec.09/Jan.10) SOLN: Process Status Because processes are so important to getting things done, UNIX has several commands that enable you to examine processes and modify their state. The most frequently used command is ps, which prints out the process status for processes running on your system. Each system has a slightly different version of the ps command, but there are two main variants, the System V version (POSIX) and the Berkeley version. The following table shows the options available with ps command. POSIX -f -e or A -u user -a BS D f aux U user Significance Full listing showing PPID of each process All processes (user and system) processes Processes of user user only Processes of all users excluding processes not associated with terminal l t term Long listing showing memory related information Processes running on the terminal term

-l -t term Examples $ ps PID TTY TIME

CM D

4245 pts/7 00:00:00 bash 5314 pts/7 00:00:00 ps

Dept of CSE,SJBIT

Page 16

Unix & Shell Programming

10CS44

The output shows the header specifying the PID, the terminal (TTY), the cumulative processor time (TIME) that has been consumed since the process was started, and the process name (CMD). $ ps -f UID PID PPID C STIME TTY TIME COMMAND

root 14931 136 0 08:37:48 ttys0 0:00 rlogind sartin 14932 14931 0 08:37:50 ttys0 0:00 -sh sartin 15339 14932 7 16:32:29 ttys0 0:00 ps f The header includes the following information: UID Login name of the user PID Process ID PPID Parent process ID C An index of recent processor utilization, used by kernel for scheduling STIME Starting time of the process in hours, minutes and seconds TTY Terminal ID number TIME Cumulative CPU time consumed by the process CMD The name of the command being executed

4. What are the different modes of Vi editor ? explain with a diagram.( june/july2009)
SOLN: Input Mode Entering and Replacing Text It is possible to display the mode in which is user is in by typing, :set showmode Messages like INSERT MODE, REPLACE MODE, CHANGE MODE, etc will appear in the last line. Pressing i changes the mode from command to input mode. To append text to the right of the cursor position, we use a, text. I and A behave same as i and a, but at line extremes I inserts text at the beginning of line. A appends text at end of line. o opens a new line below the current line r<letter> replacing a single character s<text/word> replacing text with s R<text/word> replacing text with R

Dept of CSE,SJBIT

Page 17

Unix & Shell Programming


Press esc key to switch to command mode after you have keyed in text Some of the input mode commands are: COMMAND i a I A o O r s S Saving Text and Quitting The ex Mode FUNCTION inserts text appends text inserts at beginning of line appends text at end of line opens line below opens line above replaces a single character replaces with a text replaces entire line

10CS44

When you edit a file using vi, the original file is not distributed as such, but only a copy of it that is placed in a buffer. From time to time, you should save your work by writing the buffer contents to disk to keep the disk file current. When we talk of saving a file, we actually mean saving this buffer. You may also need to quit vi after or without saving the buffer. Some of the save and exit commands of the ex mode is: Command :W :x :wq :w <filename> :w! <filename> :q :q! : sh :recover Action saves file and remains in editing mode saves and quits editing mode saves and quits editing mode save as save as, but overwrites existing file quits editing mode quits editing mode by rejecting changes made escapes to UNIX shell recovers file from a crash

5. Explain with an example use of single quote, double quote and back quote in a command line.( December 2012)

Dept of CSE,SJBIT

Page 18

Unix & Shell Programming

10CS44

SOLN: Quoting is enclosing the wild-card, or even the entire pattern, within quotes. Anything within these quotes (barring a few exceptions) are left alone by the shell and not interpreted.

Examples: $ rm chap* $ rm My Document.doc Removes fil chap* Removes file My Document.doc

$ echo Current date and time is `date` Observe the use of backquotes around date in the above command. Here the output of the command execution of date is taken as argument of echo. The shell executes the enclosed command and replaces the enclosed command line with the output of the command. Similarly the following command displays the total number of files in the working directory. $ echo There are `ls | wc l` files in the current directory Observe the use of double quotes around the argument of echo. If you use single quotes, the backquote is not interpreted by the shell if enclosed in single quotes.

UNIT 4 More file attributes, Simple filters

1. Explain the following environmental variables with examples. i) SHE LL December 2012 ) ii)LOGNAME iii)PATH (Dec.09/Jan.10, Dec.08/Jan.09,

SOLN: i) SHELL : The shell sits between you and the operating system, acting as a command interpreter. It reads your terminal input and translates the commands into actions taken by the system. The shell is analogous to command.com in DOS. When you log into the system you are given a default shell. When the shell starts up it reads its startup files and may set environment variables, command search paths, and command aliases, and executes any commands specified in these files. The original shell was the Bourne shell, sh. Every Unix platform will either have the Bourne shell, or a Bourne compatible shell available. Numerous other shells are available. Some of the more well known of these may be on your Unix system: the Korn shell, ksh, by David Korn, C shell, csh, by Bill Joy and the Bourne Again SHell, bash, from the Free Software Foundations GNU project, both based on sh, the T-C shell, tcsh, and the extended C shell, cshe, both based on csh. Even though the shell appears not to be doing anything meaningful when there is no activity at the terminal, it swings into action the moment you key in something.

Dept of CSE,SJBIT

Page 19

Unix & Shell Programming


The following activities are typically performed by the shell in its interpretive cycle:

10CS44

The shell issues the prompt and waits for you to enter a command. After a command is entered, the shell scans the command line for metacharacters and expands abbreviations (like the * in rm *) to recreate a simplified command line. It then passes on the command line to the kernel for execution. The shell waits for the command to complete and normally cant do any work while the command is running. After the command execution is complete, the prompt reappears and the shell returns to its waiting role to start the next cycle. You are free to enter another command. i) pwd - print working directory At any time you can determine where you are in the file system hierarchy with the pwd, print working directory, command,

Eg: $ pwd/home/frank/src

iii)PATH : Environmental variables are used to provide information to the programs you use. We have already seen one such variable called HOME. A command runs in UNIX by executing a disk file. When you specify a command like date, the system will locate the associated file from a list of directories specified in the PATH variable and then executes it. The PATH variable normally includes the current directory also. Whenever you enter any UNIX command, you are actually specifying the name of an executable file located somewhere on the system. The system goes through the following steps in order to determine which program to execute: 1. Built in commands (such as cd and history) are executed within the shell. 2. If an absolute path name (such as /bin/ls) or a relative path name (such as ./myprog), system executes the program from the specified directory. 3. Otherwise the PATH variable is used. 2. Differentiate between hardklink and softlink in unix with examples ? (Dec.09/Jan.10, june/july2009, December 2012) SOLN: Hard Links The link count is displayed in the second column of the listing. This count is normally 1, but the following files have two links, -rwxr-xr-- 2 kumar metal 163 Jull 13 21:36 backup.sh -rwxr-xr-- 2 kumar metal 163 Jul 13 21:36 restore.sh

Dept of CSE,SJBIT

Page 20

Unix & Shell Programming

10CS44

All attributes seem to be identical, but the files could still be copies. Its the link count that seems to suggest that the files are linked to each other. But this can only be confirmed by using the i option to ls. ls -li backup.sh restore.sh 478274 -rwxr-xr-- 2 kumar metal163 jul 13 21:36 backup.sh 478274 -rwxr-xr-- 2 kumar metal163 jul 13 21:36 restore.sh ln: Creating Hard Links A file is linked with the ln command which takes two filenames as arguments (cp command). The command can create both a hard link and a soft link and has syntax similar to the one used by cp. The following command links emp.lst with employee: ln emp.lst employee The i option to ls shows that they have the same inode number, meaning that they are actually one end the same file: ls -li emp.lst employee 29518 -rwxr-xr-x 2 kumar metal 915 may 4 09:58 emp.lst 29518 -rwxr-xr-x 2 kumar metal 915 may 4 09:58 employee The link count, which is normally one for unlinked files, is shown to be two. You can increase the number of links by adding the third file name emp.dat as: ln employee emp.dat ; ls -l emp* 29518 -rwxr-xr-x 3 kumar metal 915 may 4 09:58 emp.dat 29518 -rwxr-xr-x 3 kumar metal 915 may 4 09:58 emp.lst 29518 -rwxr-xr-x 3 kumar metal 915 may 4 09:58 employee You can link multiple files, but then the destination filename must be a directory. A file is considered to be completely removed from the file system when its link count drops to zero. ln returns an error when the destination file exists. Use the f option to force the removal of the existing link before creation of the new one Where to use Hard Links ln data/ foo.txt input_files It creates link in directory input_files. With this link available, your existing programs will continue to find foo.txt in the input_files directory. It is more convenient to do this that modifies all programs to point to the new path. Links provide some protection against accidental deletion, especially when they exist in different directories. Because of links, we dont need to maintain two programs as two separate disk files if there is very little difference between them.

Dept of CSE,SJBIT

Page 21

Unix & Shell Programming

10CS44

A files name is available to a C program and to a shell script. A single file with two links can have its program logic make it behave in two different ways depending on the name by which it is called. We cant have two linked filenames in two file systems and we cant link a directory even within the same file system. This can be solved by using symbolic links (soft links). Symbolic Links Unlike the hard linked, a symbolic link doesnt have the files contents, but simply provides the pathname of the file that actually has the contents. ln -s note note.sym ls -li note note.sym 9948 -rw-r--r-- 1 kumar group 80 feb 16 14:52 note 9952 lrwxrwxrwx 1 kumar group 4 feb16 15:07note.sym ->note Where, l indicate symbolic link file category. -> indicates note.sym contains the pathname for the filename note. Size of symbolic link is only 4 bytes; it is the length of the pathname of note. Its important that this time we indeed have two files, and they are not identical. Removing note.sym wont affect us much because we can easily recreate the link. But if we remove note, we would lose the file containing the data. In that case, note.sym would point to a nonexistent file and become a dangling symbolic link. Symbolic links can also be used with relative pathnames. Unlike hard links, they can also span multiple file systems and also link directories. If you have to link all filenames in a directory to another directory, it makes sense to simply link the directories. Like other files, a symbolic link has a separate directory entry with its own inode number. This means that rm can remove a symbolic link even if its points to a directory. A symbolic link has an inode number separate from the file that it points to. In most cases, the pathname is stored in the symbolic link and occupies space on disk. However, Linux uses a fast symbolic link which stores the pathname in the inode itself provided it doesnt exceed 60 characters This command displays the end of the file. It displays the last 10 lines of the file, when used without an option. 3. Explain the following commands with examples i)Tail ii)Paste iii)Tr iv) Pr v) sort vi) uniq Dec.08/Jan.09, December 2012 ) SOLN: i) tail displaying the end of a file tail emp.lst (Dec.09/Jan.10, june/july2009,

Dept of CSE,SJBIT

Page 22

Unix & Shell Programming


-n to specify a line count tail -n 3 emp.lst

10CS44

displays the last three lines of the file. We can also address lines from the beginning of the file instead of the end. The +count option allows to do that, where count represents the line number from where the selection should begin. tail +11 emp.lst Will display 11th line onwards Different options for tail are: Monitoring the file growth (-f) Extracting bytes rather than lines (-c) Use tail f when we are running a program that continuously writes to a file, and we want to see how the file is growing. We have to terminate this command with the interrupt key. ii) paste pasting files When we cut with cut, it can be pasted back with the paste command, vertically rather than horizontally. We can view two files side by side by pasting them. In the previous topic, cut was used to create the two files cutlist1 and cutlist2 containing two cut-out portions of the same file. paste cutlist1 cutlist2 We can specify one or more delimiters with -d paste -d | cutlist1 cutlist2 Where each field will be separated by the delimiter |. Even though paste uses at least two files for concatenating lines, the data for one file can be supplied through the standard input. iii) tr command translating characters The tr filter manipulates the individual characters in a line. It translates characters using one or two compact expressions. tr options expn1 expn2 standard input It takes input only from standard input, it doesnt take a filename as argument. By default, it translates each character in expression1 to its mapped counterpart in expression2. The first character in the first expression is replaced with the first character in the second expression, and similarly for the other characters. tr |/ ~- < emp.lst | head n 3 exp1=|/ ; exp2=~- tr $exp1 $exp2 < emp.lst

Dept of CSE,SJBIT

Page 23

Unix & Shell Programming


Changing case of text is possible from lower to upper for first three lines of the file. head n 3 emp.lst | tr [a-z] [A-Z] Different tr options are: Deleting charecters (-d) tr d |/ < emp.lst | head n 3 Compressing multiple consecutive charecters (-s) tr s < emp.lst | head n 3 Complementing values of expression (-c) tr cd |/ < emp.lst Using ASCII octal values and escape sequences tr | \012 < emp.lst | head n 6 iv) pr : paginating files We know that, cat dept.lst 01|accounts|6213 02|progs|5423 03|marketing|6521 04|personnel|2365 05|production|9876 06|sales|1006

10CS44

pr command adds suitable headers, footers and formatted text. pr adds five lines of margin at the top and bottom. The header shows the date and time of last modification of the file along with the filename and page number.

May 06 10:38 1997 dept.lst page 1 01:accounts:6213 02:progs:5423 03:marketing:6521

Dept of CSE,SJBIT

Page 24

Unix & Shell Programming


04:personnel:2365 05:production:9876 06:sales:1006 blank lines pr options The different options for pr command are: -k prints k (integer) columns -t to suppress the header and footer -h to have a header of users choice -d double spaces input -n will number each line and helps in debugging -on offsets the lines by n spaces and increases left margin of page pr +10 chap01 starts printing from page 10 pr -l 54 chap01 this option sets the page length to 54 sort : ordering a file

10CS44

Sorting is the ordering of data in ascending or descending sequence. The sort command orders a file and by default, the entire line is sorted sort shortlist This default sorting sequence can be altered by using certain options. We can also sort one or more keys (fileds) or use a different ordering rule. sort options The important sort options are: -tchar -k n -k m,n -k m.n uses delimiter char to identify fields sorts on nth field starts sort on mth field and ends sort on nth field starts sort on nth column of mth field

Dept of CSE,SJBIT

Page 25

Unix & Shell Programming


-u -n -r -f -m list -c -o flname sort t| k 2 shortlist sorts the second field (name) sort t| r k 2 shortlist sort t| k 2r shortlist sort order can be revered with this r option. sort t| k 3,3 k 2,2 shortlist sorting on secondary key is also possible as shown above. sort t| k 5.7,5.8 shortlist we can also specify a character position with in a field to be the beginning of sort as shown above (sorting on columns). sort n numfile or removes repeated lines sorts numerically reverses sort order folds lowercase to equivalent uppercase merges sorted files in list checks if file is sorted places output in file flname

10CS44

when sort acts on numericals, strange things can happen. When we sort a file containing only numbers, we get a curious result. This can be overridden by n (numeric) option. cut d | f3 emp.lst | sort u | tee desigx.lst Removing repeated lines can be possible using u option as shown above. If we cut out the designation filed from emp.lst, we can pipe it to sort to find out the unique designations that occur in the file. Other sort options are: sort o sortedlist k 3 shortlist sort o shortlist shortlist sort c shortlist sort t | c k 2 shortlist

Dept of CSE,SJBIT

Page 26

Unix & Shell Programming


sort m foo1 foo2 foo3 uniq locate repeated and nonrepeated lines

10CS44

When we concatenate or merge files, we will face the problem of duplicate entries creeping in. we saw how sort removes them with the u option. UNIX offers a special tool to handle these lines the uniq command. Consider a sorted dept.lst that includes repeated lines: cat dept.lst displays all lines with duplicates. Where as, uniq dept.lst simply fetches one copy of each line and writes it to the standard output. Since uniq requires a sorted file as input, the general procedure is to sort a file and pipe its output to uniq. The following pipeline also produces the same output, except that the output is saved in a file: sort dept.lst | uniq uniqlist Different uniq options are : Selecting the nonrepeated lines (-u) cut d | f3 emp.lst | sort | uniq u Selecting the duplicate lines (-d) cut d | f3 emp.lst | sort | uniq d Counting frequency of occurrence (-c) cut d | f3 emp.lst | sort | uniq c 4. What is job? Exaplin different job control facilities with suitable example(june/july2009, Dec.08/Jan.09) SOLN: Running Jobs in Background The basic idea of a background job is simple. It's a program that can run without prompts or other manual interaction and can run in parallel with other active processes. Interactive processes are initialized and controlled through a terminal session. In other words, there has to be someone connected to the system to start these processes; they are not started automatically as part of the system functions. These processes can run in the foreground, occupying the terminal that started the program, and you can't start other applications as long as this process is running in the foreground. There are two ways of starting a job in the background with the shells & operator and the nohup command. &: No Logging out

Dept of CSE,SJBIT

Page 27

Unix & Shell Programming

10CS44

Ordinarily, when the shell runs a command for you, it waits until the command is completed. During this time, you cannot communicate with the shell. You can run a command that takes a long time to finish as a background job, so that you can be doing something else. To do this, use the & symbol at the end of the command line to direct the shell to execute the command in the background. $ sort o emp.dat emp.dat & [1] 1413 Note: 1. Observe that the shell acknowledges the background command with two numbers. First number [1] is the job ID of this command. The other number 1413 is the PID. 2. When you specify a command line in a pipeline to run in the background, all the commands are run in the background, not just the last command. 3. The shell remains the parent of the background process. nohup: Log out Safely A background job executed using & operator ceases to run when a user logs out. This is because, when you logout, the shell is killed and hence its children are also killed. The UNIX system provides nohup statement which when prefixed to a command, permits execution of the process even after the user has logged out. You must use the & with it as well. The syntax for the nohup command is as follows: nohup command-string [input-file] output-file & If you try to run a command with nohup and havent redirected the standard error, UNIX automatically places any error messages in a file named nohup.out in the directory from which the command was run. In the following command, the sorted file and any error messages are placed in the file nohup.out. $ nohup sort sales.dat & 1252 Sending output to nohup.out Note that the shell has returned the PID (1252) of the process. When the user logs out, the child turns into an orphan. The kernel handles such situations by reassigning the PPID of the orphan to the systems init process (PID 1) - the parent of all shells. When the user logs out, init takes over the parentage of any process run with nohup. In this way, you can kill a parent (the shell) without killing its child. The jobs PID

Dept of CSE,SJBIT

Page 28

Unix & Shell Programming

10CS44

A job is a name given to a group of processes that is typically created by piping a series of commands using pipeline character. You can use job control facilities to manipulate jobs. You can use job control facilities to, 1. Relegate a job to the background (bg) 2. Bring it back to the foreground (fg) 3. List the active jobs (jobs) 4. Suspend a foreground job ([Ctrl-z] ) 5. Kill a job (kill) The following examples demonstrate the different job control facilities. Assume a process is taking a long time. You can suspend it by pressing [Ctrl-z] . [1] + Suspended wc l hugefile.txt

A suspended job is not terminated. You can now relegate it to background by, $ bg You can start more jobs in the background any time: $ sort employee.dat > sortedlist.dat & [2] 530

$ grep director emp.dat & [3] 540

You can see a listing of these jobs using jobs command, $ jobs [3] + Running [2] - Running [1] Suspended grep director emp.dat & sort employee.dat > sortedlist.dat & wc l hugefile.txt

You can bring a job to foreground using fg %jobno OR fg %jobname as, $ fg %2 OR $ fg %sort

6. Expalin about file systems and inodes. ( june/july2009, Dec.08/Jan.09) SOLN: File Systems and inodes The hard disk is split into distinct partitions, with a separate file system in each partition. Every file system has a directory structure headed by root. n partitions = n file systems = n separate root directories

Dept of CSE,SJBIT

Page 29

Unix & Shell Programming

10CS44

All attributes of a file except its name and contents are available in a table inode (index node), accessed by the inode number. The inode contains the following attributes of a file: File type File permissions Number of links The UID of the owner The GID of the group owner File size in bytes Date and time of last modification Date and time of last access Date and time of last change of the inode An array of pointers that keep track of all disk blocks used by the file

UNIT 5 Filters using regular expressions


1.What is the difference between wildcard and a regular expression? Explain the grep command using n, l , f options with examples.(Dec.09/Jan.10, june/july2009, Dec.08/Jan.09, December 2012) SOLN: grep searching for a pattern It scans the file / input for a pattern and displays lines containing the pattern, the line numbers or filenames where the pattern occurs. Its a command from a special family in UNIX for handling search requirements. grep options pattern filename(s) grep sales emp.lst will display lines containing sales from the file emp.lst. Patterns with and without quotes is possible. Its generally safe to quote the pattern. Quote is mandatory when pattern involves more than one word. It returns the prompt in case the pattern cant be located. grep president emp.lst When grep is used with multiple filenames, it displays the filenames along with the output. grep director emp1.lst emp2.lst Where it shows filename followed by the contents grep options grep is one of the most important UNIX commands, and we must know the options that POSIX requires grep to support. Linux supports all of these options.

Dept of CSE,SJBIT

Page 30

Unix & Shell Programming


-i -v -n -c -l -e exp -x -f file -E -F ignores case for matching doesnt display lines matching expression displays line numbers along with lines displays count of number of occurrences displays list of filenames only specifies expression with this option matches pattern with entire line takes pattrens from file, one per line treats pattren as an extended RE matches multiple fixed strings

10CS44

grep -i agarwal emp.lst grep -v director emp.lst > otherlist wc -l otherlist will display 11 otherlist grep n marketing emp.lst grep c director emp.lst grep c director emp*.lst will print filenames prefixed to the line count grep l manager *.lst will display filenames only grep e Agarwal e aggarwal e agrawal emp.lst will print matching multiple patterns grep f pattern.lst emp.lst all the above three patterns are stored in a separate file pattern.lst 2. What do the Regular expression match ? i)a.*b ; ii) ^{$. (Dec.09/Jan.10)

SOLN: i) a followed by nothing or any no of bs ii) for matching { at the beginning & end of the file.

Dept of CSE,SJBIT

Page 31

Unix & Shell Programming

10CS44

3. What is Sed ? with examples explain the difference between line addressing and context addressing in Sed ? (Dec.09/Jan.10, june/july2009, Dec.08/Jan.09, December 2012) SOLN: sed The Stream Editor sed is a multipurpose tool which combines the work of several filters. sed uses instructions to act on text. An instruction combines an address for selecting lines, with an action to be taken on them. sed options address action file(s) sed supports only the BRE set. Address specifies either one line number to select a single line or a set of two lines, to select a group of contiguous lines. action specifies print, insert, delete, substitute the text. sed processes several instructions in a sequential manner. Each instruction operates on the output of the previous instruction. In this context, two options are relevant, and probably they are the only ones we will use with sed the e option that lets us use multiple instructions, and the f option to take instructions from a file. Both options are used by grep in identical manner. Line Addressing sed 3q emp.lst Just similar to head n 3 emp.lst. Selects first three lines and quits sed n 1,2p emp.lst p prints selected lines as well as all lines. To suppress this behavior, we use n whenever we use p command sed n $p emp.lst Selects last line of the file sed n 9,11p emp.lst Selecting lines from anywhere of the file, between lines from 9 to 11 sed n 1,2p 7,9p $p emp.lst Selecting multiple groups of lines sed n 3,$!p emp.lst Negating the action, just same as 1,2p

Dept of CSE,SJBIT

Page 32

Unix & Shell Programming


Using Multiple Instructions (-e and f) There is adequate scope of using the e and f options whenever sed is used with multiple instructions. sed n e 1,2p e 7,9p e $p emp.lst Let us consider, cat instr.fil 1,2p 7,9p $p -f option to direct the sed to take its instructions from the file sed n f instr.fil emp.lst We can combine and use e and f options as many times as we want sed n f instr.fil1 f instr.fil2 emp.lst sed n e /saxena/p f instr.fil1 f instr.fil2 emp.lst Context Addressing We can specify one or more patterns to locate lines sed n /director/p emp.lst

10CS44

We can also specify a comma-separated pair of context addresses to select a group of lines. sed n /dasgupta/,/saxena/p emp.lst Line and context addresses can also be mixed sed n 1,/dasgupta/p emp.lst 4. Explain different ways of using test condition with examples(june/july2009) Soln: Using test and [ ] to Evaluate Expressions Test statement is used to handle the true or false value returned by expressions, and it is not possible with if statement. Test uses certain operators to evaluate the condition on its right and returns either a true or false exit status, which is then used by if for making decisions. Test works in three ways: Compare two numbers Compares two strings or a single one for a null value Checks files attributes

Dept of CSE,SJBIT

Page 33

Unix & Shell Programming

10CS44

Test doesnt display any output but simply returns a value that sets the parameters $? Numeric Comparison Operator -eq -ne -gt -ge -lt -le Meaning Equal to Not equal to Greater than Greater than or equal to Less than Less than or equal Table: Operators Operators always begin with a (Hyphen) followed by a two word character word and enclosed on either side by whitespace. Numeric comparison in the shell is confined to integer values only, decimal values are simply truncated. Ex: $x=5;y=7;z=7.2 1. $test $x eq $y; echo $? 1 2. $test $x lt $y; echo $? 0 3. $test $z gt $y; echo $? 1 2 4. $test $z eq $y ; echo $y Not equal

True

7.2 is not greater than 7

07.2 is equal to 7 1 Example 3 and 4 shows that test uses only integer comparison. The script emp.sh uses test in an if-elif-else-fi construct (Form 3) to evaluate the shell parameter $# #!/bin/sh #emp.sh: using test, $0 and $# in an if-elif-else-fi construct

Dept of CSE,SJBIT

Page 34

Unix & Shell Programming


If test $# -eq 0; then Echo Usage : $0 pattern file > /dev/tty Elfi test $# -eq 2 ;then Grep $1 $2 || echo $1 not found in $2>/dev/tty Else echo You didnt enter two arguments >/dev/tty fi

10CS44

It displays the usage when no arguments are input, runs grep if two arguments are entered and displays an error message otherwise. Run the script four times and redirect the output every time $emp31.sh>foo Usage : emp.sh pattern file $emp31.sh ftp>foo You didnt enter two arguments $emp31.sh henry /etc/passwd>foo Henry not found in /etc/passwd $emp31.sh ftp /etc/passwd>foo ftp:*:325:15:FTP User:/user1/home/ftp:/bin/true

UNIT 6 Essential Shell Programming


1. What is shell programming ? Write a shell program that will do the following task in order . i) clear the screen ii)print the current directory

iii)display the current login user (Dec.09/Jan.10, Dec.08/Jan.09, December 2012) SOLN: Example: script.sh #! /bin/sh # script.sh: Sample Shell Script

Dept of CSE,SJBIT

Page 35

Unix & Shell Programming


echo Welcome to Shell Programming x= tput clear y= pwd z= who echo clear the screen : $x echo This current directory is: $ y echo The current user are :$ z

10CS44

2. Explain the shell feature of while and for with syntax ? (Dec.09/Jan.10, june/july2009, Dec.08/Jan.09, December 2012) SOLN: While: Looping To carry out a set of instruction repeatedly shell offers three features namely while, until and for. Syntax: while condition is true do Commands done The commands enclosed by do and done are executed repeatedly as long as condition is true. Example: #! /bin/usr ans= y while [$ans=y] do echo Enter the code and description : \c > /dev/tty read code description echo $code $description >>newlist echo Enter any more [Y/N] read any case $any in

Dept of CSE,SJBIT

Page 36

Unix & Shell Programming


Y* | y* ) answer = y;; N* | n*) answer = n;; *) answer= y;; esac done Input: Enter the code and description : 03 analgestics Enter any more [Y/N] :y Enter the code and description : 04 antibiotics Enter any more [Y/N] : [Enter] Enter the code and description : 05 OTC drugs Enter any more [Y/N] : n Output: $ cat newlist 03 | analgestics 04 | antibiotics 05 | OTC drugs ii) for: Looping with a List for is also a repetitive structure. Synatx: for variable in list do Commands done

10CS44

list here comprises a series of character strings. Each string is assigned to variable specified. Example: for file in ch1 ch2; do > cp $file ${file}.bak

Dept of CSE,SJBIT

Page 37

Unix & Shell Programming


> echo $file copied to $file.bak done Output: ch1 copied to ch1.bak ch2 copied to ch2.bak Sources of list:

10CS44

List from variables: Series of variables are evaluated by the shell before executing the loop Example: $ for var in $PATH $HOME; do echo $var ; done Output: /bin:/usr/bin;/home/local/bin; /home/user1 List from command substitution: Command substitution is used for creating a list. This is used when list is large. Example: $ for var in `cat clist` List from wildcards: Here the shell interprets the wildcards as filenames. Example: for file in *.htm *.html ; do sed s/strong/STRONG/g s/img src/IMG SRC/g $file > $$ mv $$ $file done List from positional parameters: Example: emp.sh #! /bin/sh for pattern in $@; do grep $pattern emp.lst || echo Pattern $pattern not found done

Dept of CSE,SJBIT

Page 38

UNIX

&

SHELL

PROGRAMMING

10CS44

Unix & Shell Programming

10CS44

Output: $emp.sh 9876 Rohit 9876 2356 Jai Sharma Rohit Director Director Productions Sales

3. What is the exit status of command (exit/Exit) and where is it store ? (Dec.09/Jan.10, Dec.08/Jan.09) SOLN: exit and Exit Status of Command To terminate a program exit is used. Nonzero value indicates an error condition. Example 1: $ cat foo Cat: cant open foo Returns nonzero exit status. The shell variable $? Stores this status. Example 2: grep director emp.lst > /dev/null:echo $? 0 Exit status is used to devise program logic that braches into different paths depending on success or failure of a command 4. Write a shell script to accept 2 file names checks if the permission for these files are identical and if they are not identical outputs each filenamefollowed by permission(june/july2009) SOLN: The following shell script to accept 2 file names checks if the permission for these files are identical and if they are not identical outputs each filename followed by permission. #!/bin/sh if [ $# -lt 2 ] then echo "invalid number of arguments" exit fi str1=`ls -l $1|cut -c 2-10`

Dept of CSE,SJBIT

Page 39

Unix & Shell Programming


str2=`ls -l $2|cut -c 2-10` if [ "$str1" = "$str2" ] then echo "the file permissions are the same: $str1" else echo " Different file permissions " echo -e "file permission for $1 is $str1\nfile permission for $2 is $str2" fi Run1: [root@localhost shellprgms]# sh 2a.sh ab.c xy.c file permission for ab.c is rw-r--r-file permission for xy.c is rwxr-xr-x Run2: [root@localhost shellprgms]# chmod +x ab.c [root@localhost shellprgms]# sh 2a.sh ab.c xy.c the file permissions are the same: rwxr-xr-x

10CS44

This is a non-recursive shell script that accepts any number of arguments and prints them in a reverse order. For example if A B C are entered then output is C B A. #!/bin/sh if [ $# -lt 2 ]; then echo "please enter 2 or more arguments" exit fi for x in $@ do y=$x" "$y done

Dept of CSE,SJBIT

Page 40

Unix & Shell Programming


echo "$y" Run1: [root@localhost shellprgms]# sh sh1a.sh 1 2 3 4 5 6 7 7654321 Run2: [root@localhost shellprgms]# sh ps1a.sh this is an argument argument an is this 5.Explain with example set and shift commands in UNIX to manipulate positional parameters. (December 2012)

10CS44

SOLN: The set statement assigns positional parameters $1, $2 and so on, to its arguments. This is used for picking up individual fields from the output of a program. Example 1: $ set 9876 2345 6213 $ This assigns the value 9876 to the positional parameters $1, 2345 to $2 and 6213 to $3. It also sets the other parameters $# and $*. Example 2: $ set `date` $ echo $* Mon Oct 8 08:02:45 IST 2007 Example 3: $ echo The date today is $2 $3, $6 The date today is Oct 8, 2007 Shift: Shifting Arguments Left

Shift transfers the contents of positional parameters to its immediate lower numbered one. This is done as many times as the statement is called. When called once, $2 becomes $1, $3 becomes S2 and so on. Example 1: $ echo $@ $@ and $* are interchangeable

Dept of CSE,SJBIT

Page 41

Unix & Shell Programming


Mon Oct 8 08:02:45 IST 2007 $ echo $1 $2 $3 Mon Oct 8 $shift $echo $1 $2 $3 Mon Oct 8 08:02:45 $shift 2 $echo $1 $2 $3 08:02:45 IST 2007 Example 2: emp.sh #! /bin/sh Case $# in 0|1) echo Usage: $0 file pattern(S) ;exit ;; *) fname=$1 shift for pattern in $@ ; do grep $pattern $fname || echo Pattern $pattern not found done;; esac Output: $emp.sh emp.lst Insufficient number of arguments $emp.sh emp.lst Rakesh 1006 9877 Shifts 2 places

10CS44

9876 2356

Jai Sharma Rohit

Director Director

Productions Sales

Dept of CSE,SJBIT

Page 42

Unix & Shell Programming

10CS44

Pattern 9877 not found.

Set -- : Helps Command Substitution Inorder for the set to interpret - and null output produced by UNIX commands the option is used . If not used in the output is treated as an option and set will interpret it wrongly. In case of null, all variables are displayed instead of null. Example: $set `ls l chp1` Output: -rwxr-xr-x: bad options Example2: $set `grep usr1 /etc/passwd` Correction to be made to get correct output are: $set -- `ls l chp1` $set -- `grep usr1 /etc/passwd` 6. Discuss use of trap statement for interrupting a program in UNIX. (December 2012) SOLN: trap: interrupting a Program Normally, the shell scripts terminate whenever the interrupt key is pressed. It is not a good programming practice because a lot of temporary files will be stored on disk. The trap statement lets you do the things you want to do when a script receives a signal. The trap statement is normally placed at the beginning of the shell script and uses two lists: trap command_list signal_list When a script is sent any of the signals in signal_list, trap executes the commands in command_list. The signal list can contain the integer values or names (without SIG prefix) of one or more signals the ones used with the kill command.

Example: To remove all temporary files named after the PID number of the shell: trap rm $$* ; echo Program Interrupted ; exit HUP INT TERM

Dept of CSE,SJBIT

Page 43

Unix & Shell Programming

10CS44

trap is a signal handler. It first removes all files expanded from $$*, echoes a message and finally terminates the script when signals SIGHUP (1), SIGINT (2) or SIGTERM(15) are sent to the shell process running the script. A script can also be made to ignore the signals by using a null command list. Example: trap 1 2 15

UNIT 7 awk An Advanced Filter


1. Write a AWK program to find square of all the numbers from 1-10. (Dec.09/Jan.10) SOLN: $echo >the square of all nos from 1 to 10 are | >awk { for (k=1 ; k < =n ; k++) >sum = sum + k*k >printf $sum 2.With example explain following buit in variables of AWK i)FS 2012) ii)NF iii)FILENAME (Dec.09/Jan.10, Dec.08/Jan.09, December

SOLN: BUILT-IN VARIABLES i)The FS Variable: awk uses a contiguous string of spaces as the default field delimeter. FS redefines this field separator, which in the sample database happens to be the |. When used at all, it must occur in the BEGIN section so that the body of the program knows its value before it starts processing: BEGIN {FS=|} This is an alternative to the F option which does the same thing. ii) The NF variable: NF comes in quite handy for cleaning up a database of lines that dont contain the right number of fields. By using it on a file, say emp.lst, you can locate those lines not having 6 fields, and which have crept in due to faulty data entry: $awk BEGIN { FS = | } NF !=6 { Print Record No , NR, has , fields} empx.lst iii)The FILENAME Variable:

Dept of CSE,SJBIT

Page 44

Unix & Shell Programming

10CS44

FILENAME stores the name of the current file being processed. Like grep and sed, awk can also handle multiple filenames in the command line. By default, awk doesnt print the filename, but you can instruct it to do so: $6<4000 {print FILENAME, $0 } With FILENAME, you can device logic that does different things depending on the file that is processed. 3.Explain the following builtin function of AWK with examples ? i)Substrii )index December 2012) SOLN: BUILT-IN FUNCTIONS i) substr (stg, m, n): it extracts a substring from a string stg. m represents the starting point of extraction and n indicates the number of characters to be extracted. Because string values can also be used for computation, the returned string from this function can be used to select those born between 1946 and 1951: awk F| substr($5, 7, 2) > 45 && substr($5, 7, 2) < 52 empn.lst 2365|barun sengupta|director|personel|11/05/47|7800|2365 3564|sudhir ararwal|executive|personnel|06/07/47|7500|2365 4290|jaynth Choudhury|executive|production|07/09/50|6000|9876 9876|jai sharma|director|production|12/03/50|7000|9876 you can never get this output with either sed and grep because regular expressions can never match the numbers between 46 and 51. Note that awk does indeed posses a mechanism of identifying the type of expression from its context. It identified the date field string for using substr and then converted it to a number for making a numeric comparison. ii) index(s1, s2): it determines the position of a string s2within a larger string s1. This function is especially useful in validating single character fields. If a field takes the values a, b, c, d or e you can use this function n to find out whether this single character field can be located within a string abcde: x = index (abcde, b) This returns the value 2. iii) length: it determines the length of its arguments, and if no argument is present, the enire line is assumed to be the argument. You can use length (without any argument) to locate lines whose length exceeds 1024 characters: awk F| length > 1024 empn.lst iii)length (Dec.09/Jan.10, june/july2009, Dec.08/Jan.09,

Dept of CSE,SJBIT

Page 45

Unix & Shell Programming

10CS44

you can use length with a field as well. The following program selects those people who have short names: awk F| length ($2) < 11 empn.lst 4. With suitable examples, explain if & while statements in AWK. ( june/july2009) SOLN: i) The if statement can be used when the && and || are found to be inadequate for certain tasks. Its behavior is well known to all programmers. The statement here takes the form: If (condition is true) { Statement } else { Statement } Like in C, none of the control flow constructs need to use curly braces if theres only one statement to be executed. But when there are multiple actions take, the statement must be enclosed within a pair of curly braces. Moreover, the control command must be enclosed in parentheses. Most of the addresses that have been used so far reflect the logic normally used in the if statement. In a previous example, you have selected lines where the basic pay exceeded 7500, by using the condition as the selection criteria: $6 > 7500 { An alternative form of this logic places the condition inside the action component rather than the selection criteria. But this form requires the if statement: Awk F | { if ($6 > 7500) printf . if can be used with the comparison operators and the special symbols ~ and !~ to match a regular expression. When used in combination with the logical operators || and &&, awk programming becomes quite easy and powerful. Some of the earlier pattern matching expressions are rephrased in the following, this time in the form used by if: if ( NR > = 3 && NR <= 6 ) if ( $3 == director || $3 == chairman ) if ( $3 ~ /^g.m/ ) if ( $2 !~ / [aA]gg?[ar]+wal/ ) if ( $2 ~[cC]ho[wu]dh?ury|sa[xk]s?ena/ )

Dept of CSE,SJBIT

Page 46

Unix & Shell Programming

10CS44

To illustrate the use of the optional else statement, lets assume that the dearness allowance is 25% of basic pay when the latter is less than 600, and 1000 otherwise. The if-else structure that implants this logic looks like this: If ( $6 < 6000 ) da = 0.25*$6 else da = 1000 You can even replace the above if construct with a compact conditional structure: $6 < 6000 ? da = 0.25*$6 : da = 1000 This is the form that C and perl use to implement the logic of simple if-else construct. The ? and : act as separator of the two actions. When you have more than one statement to be executed, they must be bounded by a pair of curly braces (as in C). For example, if the factors determining the hra and da are in turn dependent on the basic pay itself, then you need to use terminators: If ( $6 < 6000 ) { hra = 0.50*$6 da = 0.25*$6 }else { hra = 0.40*$6 da = 1000 } ii) LOOPING WITH while The while loop has a similar role to play; it repeatedly iterates the loop until the command succeeds. For example, the previous for loop used for centering text can be easily replaced with a while construct: k=0 while (k < (55 length($0))/2) { printf %s, k++ } print $0

Dept of CSE,SJBIT

Page 47

Unix & Shell Programming

10CS44

The loop here prints a space and increments the value of k with every iteration. The condition (k < (55 length($0))/2) is tested at the beginning of every iteration, and the loop body only if the test succeeds. In this way, entire line is filled with a string spacesbefore the text is printed with print $0. Not that the length function has been used with an argument ($0). This awk understands to be the entire line. Since length, in the absence of arguments, uses the entire line anyway, $0 can be omitted. Similarly, print $0 may also be replaced by simply print. 5. Write a note on operators & expressions in AWK.( june/july2009) SOLN:operators and expressions can be used with awk as used with any programming language. Here, expression consists of strings, numbers and variables combined by operators. Example: (x+2)*y, x-15, x/y, etc.., Note: awk does not have any data types and every expression is interpreted either as a string or a number. However awk has the ability to make conversions whenever required. A variable is an identifier that references a value. To define a variable, you only have to name it and assign it a value. The name can only contain letters, digits, and underscores, and may not start with a digit. Case distinctions in variable names are important: Salary and salary are two different variables. awk allows the use of user-defined variables without declaring them i.e. variables are deemed to be declared when they are used for the first time itself. Example: X= 4 X= 3 Print X Print x Note: 1. Variables are case sensitive. 2. If variables are not initialized by the user, then implicitly they are initialized to zero. Strings in awk are enclosed within double quotes and can contain any character. Awk strings can include escape sequence, octal values and even hex values. Octal values are preceded by \ and hex values by \x. Strings that do not consist of numbers have a numeric value of 0.

Example 1: z = "Hello" print z

prints Hello

Example 2: y = \t\t Hello \7 print ytwo tabs followed by the string Hello and sounds a prints beep. String concatenation can also be performed. Awk does not provide any operator for this, however strings can be concatenated by simply placing them side-by-side. Example 1: z = "Hello" "World" print z Example 2 : p = UNIX ; q= awk print p q

prints Hello World

prints UNIX awk

Dept of CSE,SJBIT

Page 48

Unix & Shell Programming


Example 3: x = UNIX y = LINUX print x & y

10CS44

prints UNIX & LINUX

A numeric and string value can also be concatenated. Example : l = 8 ; m = 2 ; n = Hello Print l m Print l - m Print m + n Expressions also have true and false values positive number has true value. Example: if(c) The Comparison Operators awk also provides the comparison operators like >, <, >=, <= ,==, !=, etc.., Example 1 : $ awk F | $3 == manager || $3 == chairman { > printf %-20s %-12s %d\n, $2, $3, $5} emp.lst Output: ganesh jai sharma rohit chairman manager manager 15000 9000 8750 8500 command looks for two only in the third filed ($3).

prints 82 by converting m to string. prints 6 by converting l as number. prints 2 by converting n to numeric 0. associated with them. A nonempty string or any

This is true if c is a nonempty string or positive number.

The above rakeshmanager strings The second attempted only if (||) the first match fails.

Note: awk uses the || and && logical operators as in C and UNIX shell. Example 2 : $ awk F | $3 != manager && $3 != chairman { > printf %-20s %-12s %d\n, $2, $3, $5} emp.lst Output: Sunil kumaar Anil Kummar Accountant Clerk 7000 6000

Dept of CSE,SJBIT

Page 49

Unix & Shell Programming


Rahul Rakesh Accountant Clerk 7000 6000

10CS44

The above example illustrates the use of != and && operators. Here all the employee records other than that of manager and chairman are displayed. ~ and !~ : The Regular Expression Operators: In awk, special characters, called regular expression operators or metacharacters, can be used with regular expression to increase the power and versatility of regular expressions. To restrict a match to a specific field, two regular expression operators ~ (matches) and !~ (does not match). Example1: $2 ~ /[cC]ho[wu]dh?ury / || $2 ~ /sa[xk]s ?ena / Example2: $2 !~ /manager | chairman / Matches second field

Neither manager nor chairman

Note: The operators ~ and !~ work only with field specifiers like $1, $2, etc.,. For instance, to locate g.m s the following command does not display the expected output, because the word g.m. is embedded in d.g.m or c.g.m. $ awk F | $3 ~ /g.m./ {printf .. prints fields including g.m like g.m, d.g.m and c.g.m

To avoid such unexpected output, awk provides two operators ^ and $ that indicates the beginning and end of the filed respectively. So the above command should be modified as follows: $ awk F | $3 ~ /^g.m./ {printf .. prints fields including g.m only and not d.g.m or c.g.m The following table depicts the comparison and regular expression matching operators.

Operator < <= == != >= >

Significance Less than Less than or equal to Equal to Not equal to Greater than or equal to Greater than

Dept of CSE,SJBIT

Page 50

Unix & Shell Programming


~ !~ Matches a regular expression Doesnt matches a regular expression

10CS44

Table 1: Comparison and regular expression matching operators. Number Comparison: Awk has the ability to handle numbers (integer and floating type). Relational test or comparisons can also be performed on them. Example: $ awk F | $5 > 7500 { > printf %-20s %-12s %d\n, $2, $3, $5} emp.lst Output: ganesh jai sharma rohit In the rakesh of greater than 7500 are displayed. chairman manager manager manager 15000 9000 8750 8500 above example, the details employees getting salary

Regular expressions can also be combined with numeric comparison. Example: $ awk F | $5 > 7500 || $6 ~/1980$/ { > printf %-20s %-12s %d\n, $2, $3, $5, $6} emp.lst Output: ganesh jai sharma rohit rakesh Rahul chairman manager manager manager Accountant 15000 9000 8750 8500 6000 30/12/1950 01/01/1980 10/05/1975 20/05/1975 01/10/1980

Dept of CSE,SJBIT

Page 51

Unix & Shell Programming


Anil Clerk 5000 20/05/1980

10CS44

In the above example, the details of employees getting salary greater than 7500 or whose year of birth is 1980 are displayed. Number Processing Numeric computations can be performed in awk using the arithmetic operators like +, -, /, *, % (modulus). One of the main feature of awk w.r.t. number processing is that it can handle even decimal numbers, which is not possible in shell. Example: $ awk F | $3 == manager { > printf %-20s %-12s %d\n, $2, $3, $5, $5*0.4} emp.lst Output: jai sharma rohit rakesh manager manager manager 9000 8750 8500 3600 3500 3250

In the above example, DA is calculated as 40% of basic pay.

UNIT 8 perl - The Master Manipulator


1. Explain the following String handling functions of perl with examples i) length ii)index iii)substr iv)reverse (Dec.09/Jan.10, December 2012)

SOLN: String Handling Functions Perl has all the string handling functions that you can think of. We list some of the frequently used functions are: i) length determines the length of its argument. ii) index(s1, s2) determines the position of a string s2 within string s1. iii) substr(str,m,n) extracts a substring from a string str, m represents the starting point of extraction and n indicates the number of characters to be extracted.. iv)reverse(str) reverses the characters contained in string str.

Dept of CSE,SJBIT

Page 52

Unix & Shell Programming

10CS44

2. Write a perl program to Converting a Decimal Number to Binary( Dec.09/Jan.10, December 2012) SOLN: foreach $num (@ARGV) { $temp = $num; until ($num == 0) { $bit = $num % 2; unshift(@bit_arr, $bit); $num = int($num/2); } $binary_num = join(,@bit_arr); print (Binary form of $temp is $binary_num\n); splice(@bit_arr, 0, $#bit_arr+1); } The output of the above script (assuming script name is dec2bin.pl) is, $ dec2bin.pl 10 Binary form of 10 is 1010 $ dec2bin.pl 8 12 15 10 Binary form of 8 is 1000 Binary form of 12 is 1100 Binary form of 15 is 1111 Binary form of 10 is 1010

3. Explain the following in perl with examples ? i)foreach looping construct ii)join ( Dec.09/Jan.10, june/july2009, Dec.08/Jan.09) SOLN: i ) foreach: Looping Through a List foreach construct is used to loop through a list. Its general form is, foreach $var in (@arr) { statements

Dept of CSE,SJBIT

Page 53

Unix & Shell Programming


}

10CS44

Example: To iterate through the command line arguments (that are specified as numbers) and find their square roots, foreach $number (@ARGV) { print(The square root of $number is . . \n); } You can even use the following code segment for performing the same task. Here note the use of $_ as a default variable. foreach (@ARGV) { print(The square root of $_ is . sqrt() . \); } ii) join: Joining a List It acts in an opposite manner to split. It combines all array elements in to a single string. It uses the delimiter as the first argument. The remaining arguments could be either an array name or a list of variables or strings to be joined. $x = join(" ", "this", "is", "a", "sentence"); @x = ("words","separated","by"); $y = join("::",@x,"colons"); #$y becomes "words::separated::by::colons". # $x becomes "this is a sentence". sqrt($number)

4.Explain file handling in Perl.( june/july2009) SOLN: File Handling To access a file on your UNIX file system from within your Perl program, you must perform the following steps: 1. First, your program must open the file. This tells the system that your Perl program wants to access the file. 2. Then, the program can either read from or write to the file, depending on how you have opened the file. 3. Finally, the program can close the file. This tells the system that your program no longer needs access to the file. To open a file we use the open() function. open(INFILE, /home/srm/input.dat);

Dept of CSE,SJBIT

Page 54

Unix & Shell Programming

10CS44

INFILE is the file handle. The second argument is the pathname. If only the filename is supplied, the file is assumed to be in the current working directory. open(OUTFILE,>report.dat); # Opens the file in write mode

open(OUTFILE,>>report.dat); # Opens the file in append mode The following script demonstrates file handling in perl. This script copies the first three lines of one file into another. #!/usr/bin/perl open(INFILE, desig.dat) || die(Cannot open file); open(OUTFILE, >desig_out.dat); while(<INFILE>) { print OUTFILE if(1..3); } close(INFILE); close(OUTFILE); File Tests perl has an elaborate system of file tests that overshadows the capabilities of Bourne shell and even find command that we have already seen. You can perform tests on filenames to see whether the file is a directory file or an ordinary file, whether the file is readable, executable or writable, and so on. Some of the file tests are listed next, along with a description of what they do. if -d filename if -e filename if -f filename if -l filename if -s filename if -w filename if -x filename if -z filename if -B filename if -T filename True if file is a directory True if this file exists True if it is a file True if file is a symbolic link True if it is a non-empty file True if file writeable by the person running the program True if this file executable by the person running the program True if this file is empty True if this is a binary file True if this is a text file

Dept of CSE,SJBIT

Page 55

Unix & Shell Programming


5. Perl offers a grand superset of all possible regular expressions in UNIX. Discuss(june/july2009) SOLN: Regular Expressions and Substitution

10CS44

perl supports different forms of regular expressions we have studied so far. It makes use of the functions s and tr to perform substitution and translation respectively. The s function: Substitution You can use the =~ operator to substitute one string for another: $val =~ s/abc/def/; $val =~ s/a+/xyz/; $val =~ s/a/b/g; # replace abc with def # replace a, aa, aaa, etc., with xyz # replace all a's with b's;It also uses the g flag for global # substitution Here, the s prefix indicates that the pattern between the first / and the second is to be replaced by the string between the second / and the third. The tr function: Translation You can also translate characters using the tr prefix: $val =~ tr/a-z/A-Z/; # translate lower case to upper

Here, any character matched by the first pattern is replaced by the corresponding character in the second pattern. Using Special Characters in Patterns The following examples demonstrate the use of special characters in a pattern. 1. The * character matches zero or more of the character it follows: /jk*l/# This matches jl, jkl, jkkl, jkkkl, and so on. 2. The + character matches one or more of the preceding character: /jk+l/# This matches jkl, jkkl, jkkkl, and so on. 3. The ? character matches zero or one copies of the preceding character: /jk?l/# This matches jl or jkl. 4. If a set of characters is enclosed in square brackets, any character in the set is an acceptable match: /j[kK]l/# matches jkl or jKl 5. Consecutive alphanumeric characters in the set can be represented by a dash (-): /j[k1-3K]l/# matches jkl, j1l, j2l, j3l or jKl

Dept of CSE,SJBIT

Page 56

Unix & Shell Programming

10CS44

6. You can specify that a match must be at the start or end of a line by using ^ or $: /^jkl/# matches jkl at start of line /jkl$/ # matches jkl at end of line

7. Some sets are so common that special characters exist to represent them: \d matches any digit, and is equivalent to [0-9]. \D doesnt match a digit, same as [^0-9]. \w matches any character that can appear in a variable name; it is equivalent to [A-Za-z0-9_]. \W doesnt match a word character, same as [^a-zA-Z0-9_] \s matches any whitespace (any character not visible on the screen); it is equivalent to [ \r\t\n\f]. perl accepts the IRE and TRE used by grep and sed, except that the curly braces and parenthesis are not escaped. For example, to locate lines longer than 512 characters using IRE: perl ne print if /.{513,}/ filename # Note that we didnt escape the curly braces Editing files in-Place perl allows you to edit and rewrite the input file itself. Unlike sed, you dont have to redirect output to a temporary file and then rename it back to the original file. To edit multiple files in-place, use I option. perl p I e s/<B>/<STRONG>/g *.html *.htm The above statement changes all instances of <B> in all HTML files to <STRONG>. The files themselves are rewritten with the new output. If in-place editing seems a risky thing to do, oyu can back the files up before undertaking the operation: perl p I .bak e tr/a-z/A-Z foo[1-4] This first backs up foo1 to foo1.bak, foo2 to foo2.bak and so on, before converting all lowercase letters in each file to uppercase.

Dept of CSE,SJBIT

Page 57

You might also like