Shell Scripting Q&A

[vc_row][vc_column][vc_column_text css=”.vc_custom_1562159105664{background-color: #1e73be !important;}”]

Shell Scripting Interview Questions & Answers

[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column css_animation=”fadeInLeft” width=”1/2″][vc_tta_accordion color=”peacoc” active_section=”1″][vc_tta_section title=”What is a shell?” tab_id=”1562159123844-33d6793d-566a”][vc_column_text]Shell is an interface between the user and the kernel. Even though there can be only one kernel; a system can have many shell running simultaneously. So, whenever a user enters a command through the keyboard, the shell communicates with the kernel to execute it and then display the output to the user.[/vc_column_text][/vc_tta_section][vc_tta_section title=”What are the different types of commonly used shells on a typical Linux system?” tab_id=”1562159123863-4ec94362-22f8″][vc_column_text]csh,ksh,bash,Bourne . The most commonly used and advanced shell used today is “Bash” .[/vc_column_text][/vc_tta_section][vc_tta_section title=”What is the equivalent of a file shortcut that we have a window on a Linux system?” tab_id=”1562159136473-a7d5af42-ac52″][vc_column_text]Shortcuts are created using “links” on Linux. There are two types of links that can be used namely “soft link” and “hard link”.[/vc_column_text][/vc_tta_section][vc_tta_section title=”What is the difference between soft and hard links?” tab_id=”1562159137810-a28b8c23-fecb”][vc_column_text]Soft links are link to the file name and can reside on different filesytem as well; however hard links are link to the inode of the file and have to be on the same filesytem as that of the file. Deleting the original file makes the soft link inactive (broken link) but does not affect the hard link (Hard link will still access a copy of the file)[/vc_column_text][/vc_tta_section][vc_tta_section title=”How will you pass and access arguments to a script in Linux?” tab_id=”1562159138406-57955ef4-8e51″][vc_column_text]Arguments can be passed as:

scriptName “Arg1” “Arg2″….”Argn” and can be accessed inside the script as $1 , $2 .. $n[/vc_column_text][/vc_tta_section][vc_tta_section title=”What is the significance of $#?” tab_id=”1562159139122-647a9da1-7de2″][vc_column_text]$# shows the count of the arguments passed to the script.[/vc_column_text][/vc_tta_section][vc_tta_section title=”What is the difference between $* and $@?” tab_id=”1562159140266-b4e72f11-1587″][vc_column_text]$@ treats each quoted arguments as separate arguments but $* will consider the entire set of positional parameters as a single string.[/vc_column_text][/vc_tta_section][vc_tta_section title=”Use sed command to replace the content of the file (emulate tac command)” tab_id=”1562159140859-cbdcf4ca-4a6c”][vc_column_text]

if cat fille
ABCD
EFGH

Then O/p should be

EFGH
ABCD

sed '1! G; h;$!d' file1

Here G command appends to the pattern space,

h command copies pattern buffer to hold buffer

and d command deletes the current pattern space.[/vc_column_text][/vc_tta_section][vc_tta_section title=” Given a file, replace all occurrence of word “ABC“ with “DEF“ from 5th line till end in only those lines that contains word “MNO“” tab_id=”1562159141475-b8deeda9-28d2″][vc_column_text]

sed –n '5,$p' file1|sed '/MNO/s/ABC/DEF/'

[/vc_column_text][/vc_tta_section][vc_tta_section title=”Given a file, write a command sequence to find the count of each word.” tab_id=”1562159142091-b5f53654-e195″][vc_column_text]

tr –s  "(backslash)040" <file1|tr –s  "(backslash)011"|tr "(backslash)040 (backslash)011" "(backslash)012" |uniq –c
where "(backslash)040" is octal equivalent of "space"

“(backslash)011” is an octal equivalent of “tab character” and

“(backslash)012″ is an octal equivalent of the newline character.[/vc_column_text][/vc_tta_section][vc_tta_section title=”How will you find the 99th line of a file using only tail and head command?” tab_id=”1562159142720-9267338c-1eee”][vc_column_text]tail +99 file1|head -1[/vc_column_text][/vc_tta_section][vc_tta_section title=”Print the 10th line without using tail and head command.” tab_id=”1562159143506-00727d88-df0a”][vc_column_text]

sed –n '10p' file1

[/vc_column_text][/vc_tta_section][vc_tta_section title=”In my bash shell I want my prompt to be of format ‘$“Present working directory“:“hostname“> and load a file containing a list of user-defined functions as soon as I log in, how will you automate this?” tab_id=”1562159144707-243b707f-2e0c”][vc_column_text]In bash shell, we can create “.profile” file which automatically gets invoked as soon as I log in and write the following syntax into it.

export PS1='$ `pwd`:`hostname`>' .File1

Here File1 is the file containing the user-defined functions and “.” invokes this file in current shell.[/vc_column_text][/vc_tta_section][vc_tta_section title=”Explain about “s“ permission bit in a file?” tab_id=”1562159145319-954a2a3b-856b”][vc_column_text]”s” bit is called “set user id” (SUID) bit.

“s” bit on a file causes the process to have the privileges of the owner of the file during the instance of the program.

For example, executing “passwd” command to change current password causes the user to writes its new password to shadow file even though it has “root” as its owner.[/vc_column_text][/vc_tta_section][vc_tta_section title=” I want to create a directory such that anyone in the group can create a file and access any person’s file in it but none should be able to delete a file other than the one created by himself.” tab_id=”1562159145883-3694d6e1-1314″][vc_column_text]We can create the directory giving read and execute access to everyone in the group and setting its sticky bit “t” on as follows:

mkdir direc1
 
chmod g+wx direc1
 
chmod +t direc1

[/vc_column_text][/vc_tta_section][vc_tta_section title=”How can you find out how long the system has been running?” tab_id=”1562159146467-cf572f73-7514″][vc_column_text]We can find this by using the command “uptime”.[/vc_column_text][/vc_tta_section][vc_tta_section title=”How can any user find out all information about a specific user like his default shell, real-life name, default directory, when and how long he has been using the system?” tab_id=”1562159147083-00d0bfce-d510″][vc_column_text]finger “loginName” …where loginName is the login name of the

user whose information is expected.[/vc_column_text][/vc_tta_section][vc_tta_section title=”What is the difference between $$ and $!?” tab_id=”1562159147727-6d780593-9fd3″][vc_column_text]$$ gives the process id of the currently executing process whereas $! Shows the process id of the process that recently went into the background.[/vc_column_text][/vc_tta_section][vc_tta_section title=” What are zombie processes?” tab_id=”1562159149143-ed690927-480b”][vc_column_text]These are the processes which have died but whose exit status is still not picked by the parent process. These processes even if not functional still have its process id entry in the process table.[/vc_column_text][/vc_tta_section][vc_tta_section title=”How will you copy a file from one machine to other?” tab_id=”1562159149731-75463a9b-c3c0″][vc_column_text]We can use utilities like “ftp,” “scp” or “rsync” to copy a file from one machine to other.

E.g., Using ftp:

FTP hostname

>put file1

>bye

Above copies, file file1 from the local system to destination system whose hostname is specified.[/vc_column_text][/vc_tta_section][vc_tta_section title=”I want to monitor a continuously updating log file, what command can be used to most efficiently achieve this?” tab_id=”1562159150500-43041d20-6eba”][vc_column_text]We can use tail –f filename. This will cause only the default last 10 lines to be displayed on std o/p which continuously shows the updating part of the file.[/vc_column_text][/vc_tta_section][vc_tta_section title=”I want to connect to a remote server and execute some commands, how can I achieve this?” tab_id=”1562159151123-dbfd9ac4-30d1″][vc_column_text]We can use ssh to do this:

ssh username@serverIP -p sshport

Example

ssh root@122.52.251.171 -p 22

Once above command is executed, you will be asked to enter the password[/vc_column_text][/vc_tta_section][vc_tta_section title=”I have 2 files and I want to print the records which are common to both.” tab_id=”1562159151829-e6169aeb-55da”][vc_column_text]We can use “comm” command as follows:

comm -12 file1 file2 … 12 will suppress the content which are

unique to 1st and 2nd file respectively.[/vc_column_text][/vc_tta_section][vc_tta_section title=” Write a script to print the first 10 elements of Fibonacci series.” tab_id=”1562159152512-e69a4705-7a66″][vc_column_text]

  
#!/bin/sh
a=1
b=1
echo $a
echo $b
for I in 1 2 3 4 5 6 7 8
do
c=a
b=$a
b=$(($a+$c))
echo $b
done

[/vc_column_text][/vc_tta_section][vc_tta_section title=”How will you connect to a database server from Linux?” tab_id=”1562159153173-778ce490-9afc”][vc_column_text]We can use isql utility that comes with open client driver as follows:

isql –S serverName –U username –P password[/vc_column_text][/vc_tta_section][/vc_tta_accordion][/vc_column][vc_column css_animation=”fadeInRight” width=”1/2″][vc_tta_accordion color=”peacoc” active_section=”1″][vc_tta_section title=”What are the 3 standard streams in Linux?” tab_id=”1562159165752-1a80448f-cc5d”][vc_column_text]0 – Standard Input1 – Standard Output2 – Standard Error[/vc_column_text][/vc_tta_section][vc_tta_section title=”I want to read all input to the command from file1 direct all output to file2 and error to file 3, how can I achieve this?” tab_id=”1562159165770-5f72285a-99b0″][vc_column_text]command <file1 1>file2 2>file3[/vc_column_text][/vc_tta_section][vc_tta_section title=”What will happen to my current process when I execute a command using exec?” tab_id=”1562159179652-fa3d9f40-0e88″][vc_column_text]”exec” overlays the newly forked process on the current process; so when I execute the command using exec, the command gets executed on the current shell without creating any new processes.

E.g., Executing “exec ls” on command prompt will execute ls and once ls exits, the process will shut down[/vc_column_text][/vc_tta_section][vc_tta_section title=”How will you emulate wc –l using awk?” tab_id=”1562159180263-fe43a729-6a0d”][vc_column_text]awk ‘END {print NR} fileName'[/vc_column_text][/vc_tta_section][vc_tta_section title=”Given a file find the count of lines containing the word “ABC“.” tab_id=”1562159181156-fd0e46d0-5866″][vc_column_text]grep –c “ABC” file1[/vc_column_text][/vc_tta_section][vc_tta_section title=”What is the difference between grep and egrep?” tab_id=”1562159181775-23566da5-be7a”][vc_column_text]egrep is Extended grep that supports added grep features like “+” (1 or more occurrence of a previous character),”?”(0 or 1 occurrence of a previous character) and “|” (alternate matching)[/vc_column_text][/vc_tta_section][vc_tta_section title=”How will you print the login names of all users on a system?” tab_id=”1562159182351-c777a12a-3c25″][vc_column_text]/etc/shadow file has all the users listed.

awk –F ‘:’ ‘{print $1} /etc/shadow’|uniq -u[/vc_column_text][/vc_tta_section][vc_tta_section title=”How to set an array in Linux?” tab_id=”1562159184443-ec1a1bee-fe5e”][vc_column_text]Syntax in ksh:

Set –A arrayname= (element1 element2 ….. element)
In bash
A=(element1 element2 element3 …. elementn)

[/vc_column_text][/vc_tta_section][vc_tta_section title=” Write down the syntax of “for “ loop” tab_id=”1562159185867-35135b5c-5a1c”][vc_column_text]Syntax:

for  iterator in (elements)
do
execute commands
done

[/vc_column_text][/vc_tta_section][vc_tta_section title=”How will you find the total disk space used by a specific user?” tab_id=”1562159186507-b79b320b-844e”][vc_column_text]du -s /home/user1 ….where user1 is the user for whom the total disk space needs to be found.[/vc_column_text][/vc_tta_section][vc_tta_section title=”Write the syntax for “if“ conditionals in Linux?” tab_id=”1562159187227-2fc1c5a9-71e5″][vc_column_text]Syntax

If  condition is successful
then
execute commands
else
execute commands
fi

[/vc_column_text][/vc_tta_section][vc_tta_section title=”What is the significance of $?” tab_id=”1562159188039-1a8d5718-ae15″][vc_column_text]The command $? gives the exit status of the last command that was executed.[/vc_column_text][/vc_tta_section][vc_tta_section title=”How do we delete all blank lines in a file?” tab_id=”1562159188663-696fb190-09f2″][vc_column_text]

sed  '^ [(backslash)011(backslash)040]*$/d' file1

where (backslash)011 is an octal equivalent of space and

(backslash)040 is an octal equivalent of the tab[/vc_column_text][/vc_tta_section][vc_tta_section title=”How will I insert a line “ABCDEF“ at every 100th line of a file?” tab_id=”1562159189468-83643328-02c0″][vc_column_text]sed ‘100i\ABCDEF’ file1[/vc_column_text][/vc_tta_section][vc_tta_section title=” Write a command sequence to find all the files modified in less than 2 days and print the record count of each.” tab_id=”1562159190148-dd73ffe6-3124″][vc_column_text]find . –mtime -2 –exec wc –l {} \;[/vc_column_text][/vc_tta_section][vc_tta_section title=” How can I set the default rwx permission to all users on every file which is created in the current shell?” tab_id=”1562159191443-08cb951d-44a6″][vc_column_text]We can use:

umask 777

This will set default rwx permission for every file which is created for every user.[/vc_column_text][/vc_tta_section][vc_tta_section title=”How can we find the process name from its process id?” tab_id=”1562159191984-4398b434-d24e”][vc_column_text]We can use “ps –p ProcessId”[/vc_column_text][/vc_tta_section][vc_tta_section title=”What are the four fundamental components of every file system on Linux?” tab_id=”1562159192675-f1673b47-7ba9″][vc_column_text]Bootblock, super block, inode block and Datablock are found fundamental components of every file system on Linux.[/vc_column_text][/vc_tta_section][vc_tta_section title=”What is a boot block?” tab_id=”1562159193248-b542febb-9785″][vc_column_text]This block contains a small program called “Master Boot record”(MBR) which loads the kernel during system boot up.[/vc_column_text][/vc_tta_section][vc_tta_section title=”What is a super block?” tab_id=”1562159193965-45fa1997-25f2″][vc_column_text]Super block contains all the information about the file system like the size of file system, block size used by its number of free data blocks and list of free inodes and data blocks.[/vc_column_text][/vc_tta_section][vc_tta_section title=” What is an inode block?” tab_id=”1562159194635-a84f894e-aa55″][vc_column_text]This block contains the inode for every file of the file system along with all the file attributes except its name.[/vc_column_text][/vc_tta_section][vc_tta_section title=”How can I send a mail with a compressed file as an attachment?” tab_id=”1562159195355-dcaf5df5-9e19″][vc_column_text]zip file1.zip file1|mailx –s “subject” Recipients email id

Email content

EOF[/vc_column_text][/vc_tta_section][vc_tta_section title=”How do we create command aliases in a shell?” tab_id=”1562159196528-50bed153-e6d9″][vc_column_text]alias Aliasname=”Command whose alias is to be created”.[/vc_column_text][/vc_tta_section][vc_tta_section title=”What are “c“ and “b“ permission fields of a file?” tab_id=”1562159197152-37e43af9-4842″][vc_column_text]”c ” and “b” permission fields are generally associated with a device file. It specifies whether a file is a special character file or a block special file.[/vc_column_text][/vc_tta_section][vc_tta_section title=”What is the use of a shebang line?” tab_id=”1562159198144-da1eeda1-8860″][vc_column_text]Shebang line at the top of each script determines the location of the engine which is to be used to execute the script.[/vc_column_text][/vc_tta_section][/vc_tta_accordion][/vc_column][/vc_row]

WhatsApp us