$30
#READ THE FULL INSTRUCTIONS VERY CAREFULLY FIRST 0. Overview
In this assignment we will start with a simple exercise – familiarization with shell scripting.
Shell or “bash” (a variant of shell software) is your interface to access a multitude of software
(often called “commands”), some of which are directly provided by OS. shell OR command line OR terminal can be simply accessed in your Linux distribution by opening terminal app. Search Google to know more.
0.1. Shell scripting example
Let’s take an example: You have a file named “tmp.txt” which contains multiple lines, each line is a number. You want to numerically sort those numbers. So, you can simply
• Open up terminal.
• Type cat tmp.txt | sort -n and press Enter.
• The sorted number will be printed in the terminal You can also store it in a file for permanent use.
• You open a file called “sort.sh” where you would store your bash script.
• You want sort.sh to take filename as input
• So, within sort.sh you would put cat $1 | sort -n, save the file and run the following command: sh sort.sh tmp.txt • sort.sh is called a shell script
0.2. What is going on?
Here is a dissection of the script:
Of course, like any self-respecting programming language you can do everything in shell script (loops, conditionals, case-switch etc.). However, the power of the shell script is derived from clever use of the already-existing software and functionalities provides by shell script (e.g., cat, sort, | etc.)
0.3. Shell commands to be familiar with
There are a few shell commands that you should be familiar with to efficiently use shell (aside from the shell scripting syntax). Search google (also write man <commandname in terminal) to know more about them (some or all of them might also be useful for you to solve this assignment). Each command can take multiple arguments to perform various tasks.
• cat
• sort
• awk (also search awk one-liners)
• head
• tail
• cd
• mkdir
• ls
• touch
• file
• tr
• grep
• alias
• dd
• nohup
• wc
• split
• cut
• cmd1 &
• cmd1 | cmd2
• file1.txt < file2.txt
• file1.txt file2.txt
1. Problems
Write programs in shell script under the Linux environment that would run in bash terminal and perform the following Tasks.
1.a. Finding GCD (10 marks)
• Write a shell script which will take less than 10 integers (comma separated) and output their GCD.
• Name your shell script “Assgn1a_< groupno_<roll no. 1_< roll no. 2.sh”
• Example input: Assgn1_1a_< groupno_<roll no. 1_< roll no. 2.sh 4,8,16,56 • Example output: 4
1.b. Sorting and merging large number of files (10 marks)
• You are given a folder with hundreds of text files (download from here and unzip): https://cse.iitkgp.ac.in/~mainack/OS/assignments/2021/01/1.b.files.zip
• You need to sort each of these individual files in decreasing order (numerically), write the sorted files in a new “1.b.files.out” folder (keep the name same), and then merge these individual sorted files into a single sorted file (name it “1.b.out.txt”) which is sorted in decreasing order. Write a shell script which will iterate over the given files and perform this task.
• Name your shell script “Assgn1b_< groupno_<roll no. 1_< roll no. 2.sh”
1.c. Creating frequency distribution from a large file (10 marks)
• You have a text file with around 1.5 million lines (download from https://cse.iitkgp.ac.in/~mainack/OS/assignments/2021/01/1c_input.txt.zip and unzip)
• This text file has four space-separated columns, example of three lines from the file:
1 ib Jim 34
1 cr JoHn 24
1 ut MaRY 46
• Write a shell script which will take two inputs: (i) the input file, and (ii) a column number as a user provided input (varies from 1 to 4). For that column number the code will read entries of that column from the input file (e.g., in case of column number 3 as input the entries will be Jim, JoHn, MaRY), and convert these entries to lower case.
• Finally the script should create a file “1c_output _<column_number_column.freq”. This file will have two columns: first is a string (converted to lowercase) from the given column and second is the frequency of that string. Sort the “1e_output
_<column_number_column.freq”. The file should be sorted in decreasing order of the second column values (i.e., frequency).
• Name your shell script “Assgn1_1c_< groupno_<roll no. 1_< roll no. 2.sh”
1.d. Creating an extract utility (20 marks)
• Exaction of a compressed file via command line is often a cumbersome task. For example, uncompressing a file in “a. tar.bz2” requires the command “tar xvjf a.tar.bz2” and a file “a.tar” requires remembering and typing the command “tar xvf a.tar”.
• So, in this assignment write an “extract” script which will take a filename as input and extract the file in the current directory.
• Your function should support the extraction of files which are compressed using a number of protocols. For this assignment make sure that your script supports files with extensions tar.bz2, tar.gz, bz2, rar, gz, tar, tbz2, tgz, zip, Z, 7z
• Of course, if the data is not a known file type then extract should output “Unknown file format: cannot extract”
• Name your shell script “Assgn1d_< groupno_<roll no. 1_< roll no. 2.sh”
1.e. Creating a random password generation function (20 marks)
• Often in different webservices you would need random passwords (with upper- and lower-case letters as well as numbers and “_” character).
• So, create a “genpasswd” shell script which will generate a pseudorandom password with with upper- and lower-case letters as well as numbers and “_” character with the help of input from “/dev/urandom” which is the random number generator included in your linux distribution.
• You script should take the optional length of password as input (default length 16 characters)
• Name your shell script “Assgn1e_< groupno_<roll no. 1_< roll no. 2.sh”