summaryrefslogtreecommitdiff
path: root/ult/ult_9/script.rst
diff options
context:
space:
mode:
Diffstat (limited to 'ult/ult_9/script.rst')
-rw-r--r--ult/ult_9/script.rst441
1 files changed, 441 insertions, 0 deletions
diff --git a/ult/ult_9/script.rst b/ult/ult_9/script.rst
new file mode 100644
index 0000000..7671e13
--- /dev/null
+++ b/ult/ult_9/script.rst
@@ -0,0 +1,441 @@
+.. Objectives
+.. ----------
+
+ .. At the end of this tutorial, you will be able to:
+
+ .. 1. Prepare scripts using 'Control Operators'.
+ .. 2. Understand what 'Environment Variables' are.
+
+.. Prerequisites
+.. -------------
+
+.. 1. Shell scripts & Variables
+
+
+Script
+------
+
+.. L1
+
+{{{ Show the first slide containing title, name of the production
+team along with the logo of MHRD }}}
+
+.. R1
+
+Hello friends and Welcome to the tutorial on
+'Control structures and Operators'.
+
+.. L2
+
+{{{ Show the 'Objectives' slide }}}
+
+.. R2
+
+At the end of this tutorial, you will be able to,
+
+ 1. Prepare scripts using 'Control Operators'.
+ 2. Use 'Environment Variables'.
+
+.. L3
+
+{{{ Switch to the pre-requisite slide }}}
+
+.. R3
+
+Before beginning this tutorial,we would suggest you to complete the
+previous tutorials as being displayed currently.
+
+.. R4
+
+We have many 'Control Structures and Operators' available in the linux bash.
+Let us look at how to use them.
+To write an 'if', or an 'if-else' construct, we need to check or test for a
+condition(s). The ``test`` command allows us to test for condition(s). It has
+a whole range of tests that can be performed. The man page of ``test``
+gives you the complete listing of various types of tests that can be performed
+with it.
+
+Let's write a simple script with an ``if`` condition that tests whether a
+directory with a particular name, exists or not.
+
+.. L4
+
+.. L5
+
+{{{ Show slide, 'if' }}}
+
+.. R5
+
+Let us create a script named ``dir-test.sh`` with this code.
+::
+
+ #!/bin/bash
+ if test -d $1
+ then
+ echo "Yes, the directory" $1 "is present"
+ fi
+
+When the script is run with an argument, it will print a message, if a
+directory with the said name exists in the current working directory.
+
+.. R6
+
+Let's write a simple script which returns back whether the argument passed
+is negative or not.
+
+.. L6
+
+{{{ Open the file sign.sh and show }}}
+::
+
+ #!/bin/bash
+ if test $1 -lt 0
+ then
+ echo "number is negative"
+ else
+ echo "number is non-negative"
+ fi
+
+.. R7
+
+We can run the file with a set of different inputs and see if it works.
+
+.. L7
+
+{{{ Switch to terminal }}}
+::
+
+ ./sign.sh -11
+
+.. R8
+
+Instead of using the ``test`` command, square brackets may also be used.
+
+.. L8
+
+.. L9
+
+{{{ Show slide, [ ] - alias for test }}}
+
+.. R9
+
+Note that the spacing is important, when using the square brackets.
+The left square bracket ( ``[`` ) should be followed by a space and the right
+square bracket ( ``]`` ) should be preceded by a space.
+
+Let's create something interesting using the 'if-else' clause. Let's write a
+script, that greets the user, based on the time.
+
+.. L10
+
+{{{ Open the file clause.sh and show }}}
+{{{ Highlight the required content wherever necessary, while narrating }}}
+
+.. R10
+
+There are a couple of new things in this script. ``$LOGNAME`` is another
+'environment variable', which has the login name of the user. The variables,
+``hour`` and ``now`` are actually taking the output of the commands that
+are placed in the back quotes.
+
+Now, let us see how to run loops in bash. We shall look at the ``for`` and
+the ``while`` loops.
+
+.. L11
+
+{{{ Show slide, 'for' }}}
+
+.. R11
+
+Suppose we have a set of files, whose file-names contain numbers before the
+text, say ``08 - Society.mp3``. We would like to rename these files by
+removing the numbers before the text. How would we go about doing that?
+
+It is clear from the problem statement that we could loop over the list of
+files and rename each of them.
+
+.. R12
+
+First, let us look at a simple ``for`` loop, to understand how it works.
+
+.. L12
+
+{{{ Switch to terminal }}}
+::
+
+ for animal in rat cat dog man
+ do
+ echo $animal
+ done
+
+.. R13
+
+We just wrote a list of animals, each name separated by a space
+and then printed each name on a separate line. The variable ``animal`` is a
+'dummy' or a 'loop variable'. It can then be used to refer to the element of
+the list that is currently being dealt with. We could, obviously, use
+something as lame as ``i`` in place of ``animal``.
+
+.. L13
+
+.. R14
+
+To generate a range of numbers and iterate over them, we do the following.
+
+.. L14
+
+{{{ Open the script ``for-1.sh`` and show }}}
+
+.. R15
+
+Now, let us run the script and see what we get,
+
+.. L15
+
+{{{ Switch to terminal }}}
+::
+
+ sh for-1.sh
+
+.. R16
+
+Now, we use a ``for`` loop to list the files that we are interested in.
+
+.. L16
+
+{{{ Open the script ``for-2.sh`` and show }}}
+{{{ Switch to terminal }}}
+::
+
+ sh for-2.sh
+
+.. R17
+
+If the file-names contain spaces, ``for`` assumes, each word separated by a
+space,to be a single item in the list and prints it in a separate line. We
+could modify the script slightly to overcome this problem.
+
+.. L17
+
+{{{ Open the script ``for-3.sh`` and show }}}
+{{{ Switch to terminal }}}
+::
+
+ sh for-3.sh
+
+.. R18
+
+Now, we have each file name printed on a separate line. The file names are
+in the form ``dd - Name.mp3`` and it has to be changed to the format
+``Name.mp3``. Also, if the name has spaces, we wish to replace it with
+hyphens.
+
+.. L18
+
+{{{ Open the script ``for-4.sh`` and show }}}
+{{{ Switch to terminal }}}
+::
+
+ sh for-4.sh
+
+.. R19
+
+Now, we simply replace the echo command with a ``mv`` command.
+
+.. L19
+
+{{{ Open the script ``for-5.sh`` and show }}}
+{{{ Switch to terminal }}}
+::
+
+ sh for-5.sh
+
+.. R20
+
+We see that we get our required output. All the files have been renamed and
+the spaces are removed.
+Now let us move ahead with ``while`` loop.
+The ``while`` command allows us to continuously execute a block of commands
+until the command that is controlling the loop is executing successfully.
+
+.. L20
+
+.. R21
+
+Let's start with the lamest example of a ''while'' loop.
+
+.. L21
+
+{{{ Open the script ``while-1.sh`` and show }}}
+{{{ Switch to terminal }}}
+::
+
+ sh while-1.sh
+
+.. R22
+
+This, as you can see, is an infinite loop that prints ``True``.
+
+Say, we wish to write a simple program that takes input from the user
+and prints it back, until the input is ``quit``, which then quits the program.
+
+.. L22
+
+{{{ Open the script ``while-2.sh`` and show }}}
+{{{ Switch to terminal }}}
+::
+
+ sh while-2.sh
+
+.. L23
+
+{{{ Show slide, Environment Variables }}}
+
+.. R23
+
+'Environment variables' are a way of passing information from the shell to the
+programs that are run in it. Standard UNIX variables are split into two
+categories,'Environment variables' and 'Shell variables'. In broad terms,
+'Shell variables' apply only to the current instance of the shell and are
+used to set short-term working conditions; 'Environment variables' have a
+farther reaching significance, and are set at login, valid for the duration of
+the session. By convention, 'Environment variables' have UPPER CASE and 'Shell
+variables' have lower case names.
+
+You can see an example of environment variables in the slide.
+
+.. R24
+
+To see all the variables and their values, we could use any of the
+following,
+
+.. L24
+
+{{{ Switch to terminal }}}
+::
+
+ printenv | less
+ env
+
+.. R25
+
+We have looked at the 'PATH' variable, in the previous tutorial. We shall now
+use the ``export`` command to change it's value.
+
+.. L25
+::
+
+ export PATH=$PATH:$HOME/bin
+
+.. R26
+
+Observe the difference in the value of 'PATH' variable before and after
+modifying it.
+
+``export`` command is used to export a variable to the environment of all
+the processes that are started from that shell.
+
+.. L26
+
+.. L27
+
+{{{ Switch to 'Summary' slide }}}
+
+.. R27
+
+This brings us to the end of this tutorial.
+In this tutorial, we have learnt to,
+
+1. Prepare scripts using control structures like ``if``, ``if-else``,
+ ``for`` and ``while``.
+2. Use 'environment variables'.
+3. Export a variable to the environment of all the processes, using
+ the ``export`` command.
+
+.. L28
+
+{{{ Show self assessment questions slide }}}
+
+.. R28
+
+Here are some self assessment questions for you to solve:
+
+1. Print the text ``dog man`` in such a way that the prompt continues after
+ the text.
+
+2. How can you add a new path variable ``/myscripts`` to $PATH variable ?
+
+.. L30
+
+{{{ Solutions of self assessment questions on slide }}}
+
+.. R30
+
+And the answers,
+
+1. We print the given text using the ``echo`` command by using an additional
+ option -n as,
+::
+
+ $echo -n dog man
+
+2. We can add a new path variable by using the export command as,
+
+::
+
+ $export PATH=$PATH://myscripts
+
+.. L31
+
+{{{ Show the SDES & FOSSEE slide }}}
+
+.. R31
+
+Software Development techniques for Engineers and Scientists - SDES, is an
+initiative by FOSSEE. For more information, please visit the given link.
+
+Free and Open-source Software for Science and Engineering Education - FOSSEE, is
+based at IIT Bombay which is funded by MHRD as part of National Mission on
+Education through ICT.
+
+.. L32
+
+{{{ Show the ``About the Spoken Tutorial Project'' slide }}}
+
+.. R32
+
+Watch the video available at the following link. It summarises the Spoken
+Tutorial project.If you do not have good bandwidth, you can download and
+watch it.
+
+.. L33
+
+{{{ Show the `` Spoken Tutorial Workshops'' slide }}}
+
+.. R33
+
+The Spoken Tutorial Project Team conducts workshops using spoken tutorials,
+gives certificates to those who pass an online test.
+
+For more details, contact contact@spoken-tutorial.org
+
+.. L34
+
+{{{ Show the ``Acknowledgements'' slide }}}
+
+.. R34
+
+Spoken Tutorial Project is a part of the "Talk to a Teacher" project.
+It is supported by the National Mission on Education through ICT, MHRD,
+Government of India. More information on this mission is available at the
+given link.
+
+.. L35
+
+{{{ Show the Thank you slide }}}
+
+.. R35
+
+Hope you have enjoyed this tutorial and found it useful.
+Thank you!
+