Changes

Jump to: navigation, search

Tutorial10: Shell Scripting - Part 1

2,520 bytes added, 02:18, 17 May 2021
no edit summary
=INVESTIGATION 1: CREATING A SHELL SCRIPT=
<span style="color:red;">'''ATTENTION''': Depending on your ULI101 instructor, you may be required to complete this tutorial for '''marks''' in this course.<br>Please refer to your instructor's course notes and lecture notes regarding evaluation for this course.<br><br>The due date for successfully completing this tutorial (i.e. '''tutorial 10''') is by '''Friday by midnight''' next week (i.e. '''Week 10''').<br>If your instructor has NOT assigned marks for completing this tutorial, you can perform it for '''practice'''.</span><br><br> In this sectioninvestigation, you will learn how to create and run a '''Bash Shell script'''.
# '''Login''' to your matrix account.<br><br>
# Issue a command to '''confirm''' you are located in your '''home''' directory.<br><br>We want to create a Bash Shell script to welcome the user by their ''username''.<br>Let's first look at selecting an appropriate filename for your shell script.<br><br>
# Issue the following linux command to check if the filename called '''hello'''<br>already exists as a command:<br><span style="color:blue;font-weight:bold;font-family:courier;">which hello</span><br><br>You The output from this command should notice indicate that the shell did NOT<br>find any directories that contained this filename that there is no output and could represent<br>a command; therefore, this shell script name CAN be used.<br><br>[[Image:hello0.png|thumb|right|200px|Using a '''text editor''' to add Linux commands in to the '''hello''' shell script.]]
# Use a '''text editor''' like '''vi''' or '''nano''' to create the text file called '''hello'''<br><br>
# Enter the following two lines in your shell script, replacing "your-username" with your actual name:<br><span style="font-family:courier;font-weight:bold;">echo<br>echo "Hello $USER"<br>echo</span><br><br>'''NOTE:''' The variable called '''USER''' is an '''environment variable''' that contains the <u>current</u> user's login name. If you wanted to share your shell script with other users, when they run the shell script, they will greeted by <u>their</u> username. ''Environment variables'' make your shell script adaptable by ALL users.<br><br>
# '''Save''' your editing session and '''exit''' the text editor.<br><br>Instead of issuing the '''bash''' command followed by your shell script pathname as an ''argument'',<br>let's simply run it by its filename. This is the most common method of running shell scripts.<br><br><table align="right"><tr valign="top"><td>[[Image:no-execute.png|thumb|right|230px|An '''error message''' will appear when trying to run a shell script by name that does NOT have '''execute''' permissions.]]</td><td>[[Image:hello1.png|thumb|right|150px|Output from running your '''hello''' shell script (YourUserID representing <u>your</u> username).]]</td></table>
# Issue the following linux command to run your shell script in your current directory:<br><span style="color:blue;font-weight:bold;font-family:courier;">./hello</span><br><br>'''You should notice an error '''ERROR message''' indicating you don't have permissions to run the file'''. You To fix this, you need to add <br>'''add execute permissions''' prior to running the shell script.<br><br># Issue the following linux command to '''add''' <br>execute permissions for your shell script:<br><span style="color:blue;font-weight:bold;font-family:courier;">chmod u+x hello</span><br><br># Re-Issue the following to run your shell script: <br><span style="color:blue;font-weight:bold;font-family:courier;">./hello</span><br><br>Did your shell script run?<br><br><span style="color:red;">'''ATTENTION:''' Students might get FRUSTRATED when performing their '''assignment 3''' when their Bash shell scripts have errors. <br>One major cause is the the OUTPUT of their Bash shell script when run does not '''EXACTLY match''' the required output <br>for the '''correct ''' Bash shell script. <br><br>This requires that you CAREFULLY '''read''' the requirements of your Bash shell script and create it to the EXACT specifications</span><br><br># Issue the following Linux command to run a checking script:<br><span style="color:blue;font-weight:bold;font-family:courier;">bash /home/murray.saul/myscripts~uli101/week10-check-1</span><br><br>
# If you encounter errors, make corrections and '''re-run''' the checking script until you<br>receive a congratulations message, then you can proceed.<br><br>
::In the next investigation, you will learn to create and run shell scripts that<br >use '''variables''', '''positional''' and '''special parameters'''. You will also learn how to<br><u>add</u> a '''she-bang line''' at the top of a shell script to force it to run in a specified shell.<br><br>Proceed to the next investigation.<br><br>
=INVESTIGATION 2: SHE-BANG LINE / VARIABLES / PARAMETERS=
In this sectioninvestigation, you will add a '''she-bang''' line at the top of your shell script to force the shell script to run in a <br>specified shell when executed. You will also learn how to use '''variables''', '''positional''' and '''special parameters''' <br>to make your shell scripts more adaptable.
'''Perform the Following Steps:'''
# Confirm that you are located in your '''home''' directory in your Matrix account.<br><br>Let's run shell scripts <u>with</u> and <u>without</u> a '''she-bang''' line at the top of your shell script<br>to understand demonstrate why using a ''she-bang'' line should be usedincluded in a shell script to force<br>the shell script to be run in a ''specific'' shell.<br><br>
# Use a text editor to '''edit''' the '''hello''' shell script that you created in the <u>previous</u> investigation.<br><br>
# Add the following line to the <u>bottom</u> of the file ('''copy''' and '''paste''' to prevent ''errors''):<br><span style="font-family:courier;font-weight:bold;">echo "The current shell you are using is: $(ps -o cmd= -p $$|cut -d' ' -f1)"</span><br><br>'''FYI:''' This command displays the '''name''' of the ''shell'' that the shell script is running in.<br>The command within <span style="font-family:courier;font-weight:bold;">$( )</span> uses a technique known as '''command substitution'''.<br><br>
# Issue the following Linux command to change to an older shell called the '''Bourne Shell''':<br><span style="color:blue;font-weight:bold;font-family:courier;">sh</span><br><br>You should notice your '''shell prompt changed that ''' which indicates <br>that you are in a different shell.<br><br>[[Image:hello2.png|thumb|right|275px|Changing the Bourne shell and running shell script '''without''' a '''She-bang''' line.]]# Issue the following Linux command to run your shell script in the ''Bourne Shell'':<br><span style="color:blue;font-weight:bold;font-family:courier;">./hello</span><br><br>You should see that you are currently running the shell script "'''sh'''"<br>which represents the '''Bourne shell'''.<br><br>'''NOTE:''' Due to the fact that shells (and their features) have '''evolved''' over a period of time,<br>an error may occur if you include a '''NEWER shell feature''' (e.g. ''Bash Shell'') but run it in an '''OLDER shell''' (For example: the ''Bourne Shell'').<br><br>[[Image:she-bang-1.png|thumb|right|275px|Adding a '''she-bang line''' at the BEGINNING of the first line in you shell script forces the shell script to be run in that specific shell (in this case, the Bash shell).]]You can add a '''special comment''' called a '''she-bang line''' at the BEGINNING of the <br><u>FIRST line</u> of your shell script to '''force''' it to run in the shell you want <br>(for example: the Bash shell).<br><br>
# Edit your '''hello''' shell script using a text editor.<br><br>
# '''Insert''' the following line at the '''beginning''' of the '''first''' line of your hello file:<br><span style="font-family:courier;font-weight:bold;">#!/bin/bash</span><br><br>This is referred to as a '''she-bang line'''. It forces this script to be run in the '''Bash Shell'''.<br>When your Bash Shell script finishes execution, you are returned to your current shell that you are using (which in our case in Matrix, is still the Bash shell).<br><br>[[Image:hello3.png|thumb|right|275px|Changing the Bourne shell and running shell script '''with''' a '''She-bang''' line (forcing script to run in the '''Bash''' shell).]]
# '''Save''' your editing changes and '''exit''' your text editor.<br><br>
# While in the ''Bourne shell'', issue the following Linux command:<br><span style="color:blue;font-weight:bold;font-family:courier;">./hello</span><br><br>You should notice that the shell name is running in the '''Bash shell'''(i.e. ''/bin/bash'').<br><br> # It is a good idea to rename your shell script to include an '''extension''' to<br>explain indicate that this it is a '''Bash Shell script''' file (referred to as a "''portable Bash shell script''"). <br><br># Issue the following Linux command to rename your shell script file:<br><span style="color:blue;font-weight:bold;font-family:courier;">mv hello hello.bash</span><br><br># Confirm that the modification work by running your renamed Bash shell scriptworks by issuing:<br><span style="color:blue;font-weight:bold;font-family:courier;">./hello.bash</span><br><br># Enter the following Linux command to '''exit''' the ''Bourne shell'' and return to your ''Bash shell'':<br><span style="color:blue;font-weight:bold;font-family:courier;">exit</span><br><br>'''Environment variables''' are used to set the environment of the shell or shell scripts<br>Let's use include some '''ENVIRONMENT variables''' in our Bash Shell script.<br><br>
# Use a text editor to edit the shell script called '''hello.bash'''<br><br>
# Add the following lines to the <u>bottom</u> of the ''hello.bash'' file:<br><span style="font-family:courier;font-weight:bold;">echo<br>echo "The current directory location is: $PWD"<br>echo "The current user home directory is: $HOME"<br>echo</span><br><br>
# Save your editing changes and exit your text editor.<br><br>[[Image:hello4-0.png|thumb|right|330px|Running <u>modified</u> ''hello.bash'' Bash shell script by using relative pathname: <span style="font-family:courier;">''./hello.bash''</span>]]
# To confirm that you properly renamed Run your modified Bash shell script,<br>run the following shell scriptby issuing:<br><span style="color:blue;font-weight:bold;font-family:courier;">./hello.bash</span><br><br>Take time to view the output and the values of the environment variables.<br><br>You can modify the PATH variable to include the current directory (i.e. ".")<br>so you can run the command by just script filename<br>(eg. <span style="font-family:courier;font-weight:bold;">hello.bash</span> as opposed to <span style="font-family:courier;font-weight:bold;">./hello.bash</span>)<br><br>
# Issue the following Linux command to add your current directory to the '''PATH''' environment variable:<br><span style="color:blue;font-weight:bold;font-family:courier;">PATH=$PATH:.</span><br><br>[[Image:hello4.png|thumb|right|330px|Running <u>modified</u> ''hello.bash'' Bash shell script by entering <u>just</u> '''filename''' (i.e. <span style="font-family:courier;">''hello.bash''</span> and NOT <span style="font-family:courier;">''./hello.bash''</span> shown in previous diagram).]]
# Issue the following Linux command to confirm that the current directory '''"."''' <br>has been '''added ''' to the <u>end</u> of the '''PATH''' environment variable:<br><span style="color:blue;font-weight:bold;font-family:courier;">echo $PATH</span><br><br>
# Issue the following to run your Bash shell script just by name:<br><span style="color:blue;font-weight:bold;font-family:courier;">hello.bash</span><br><br>Did your Bash shell script run?<br><br>
# Exit your Matrix session, and log back into your Matrix session.<br><br>
# Re-run the '''hello.bash''' shell script by just using the name.<br><br>What did you notice?<br><br>The setting of the '''PATH''' environment variable only worked in the current session only.<br>If you exit the current Matrix session, then the recently changed settings for environment variables will be lost.<br>You will in a <u>future</u> tutorial how to set environment variables in '''start-up''' files.<br><br><span style="color:red;">'''ATTENTION:''' Students will might get FRUSTRATED when performing their '''assignment 3''' when their Bash shell scripts have errors. <br>One major cause is the the OUTPUT of their Bash shell script when run does not '''EXACTLY match''' the required output <br>for the '''correct ''' Bash shell script. <br><br>This requires that you CAREFULLY '''read''' the requirements of your Bash shell script and create it to the EXACT specifications</span>.<br><br># Issue the following Linux command to run a checking script:<br><span style="color:blue;font-weight:bold;font-family:courier;">bash /home/murray.saul/myscripts~uli101/week10-check-2 | more</span><br><br>If you encounter errors, make corrections and '''re-run''' the checking script until you<br>receive a congratulations message, then you can proceed.<br><br>Unlike '''Environment variables''' that are used to set the environment of the shell or shell scripts,<br>'''User-created''' variables are "customized" that the user can set or allow a user to set the variables' values.<br>Let's create a Bash shell script that contain '''user-created variables'''.<br><br>
# Use a text editor to create a Bash shell script called '''user-variables.bash'''<br><br>
# Add the following lines to the beginning of the ''user-variables.bash'' file:<br><span style="font-family:courier;font-weight:bold;">#!/bin/bash<br>read -p "Enter your Full Name: " name<br>read -p "Enter your age (in years): " age<br>echo "Hello $name - You are $age years old"</span><br><br>
# Save your editing changes and exit your text editor.<br><br>[[Image:user-variable1.png|thumb|right|300px|Prompting user to enter data via the '''read -p''' command storing into '''user-created variable'''.]]
# Issue the '''chmod''' command to add '''execute permissions''' for the user <br>for the '''user-variables.bash''' file.<br><br># Issue the following to run the user-variables.bash Bash shell script<br> (enter '''your Full name ''' and '''your age ''' when prompted):<br><span style="color:blue;font-weight:bold;font-family:courier;">./user-variables.bash</span><br><br>What did you notice?<br><br>
# Use a text editor to '''modify''' your Bash shell script called '''user-variables.bash'''<br><br>
# '''Insert''' the following lines immediately <u>'''below'''</u> the '''she-bang''' line:<br><span style="font-family:courier;font-weight:bold;">age=25<br>readonly age</span><br><br>
# Save your editing changes and exit your text editor.<br><br>[[Image:user-variable2.png|thumb|right|330px|Trying to change the value of a '''read-only''' variable'''.]]
# Issue the following to run the user-variables.bash Bash shell script:<br><span style="color:blue;font-weight:bold;font-family:courier;">./user-variables.bash</span><br><br>What do you notice when you try to change the age variable? Why?<br><br>A '''positional parameter''' is a special variable within a shell program; its value is set from '''arguments''' contained in a shell script or using the set command.<br>Let's use '''positional parameters''' and '''special parameters''' in a Bash shell script.<br><br>
# Use a text editor to create a file called '''parameters.bash'''<br><br>
# Add the following lines to the beginning of this file:<br><span style="font-family:courier;font-weight:bold;">#!/bin/bash<br>echo \$0: $0<br>echo \$2: $2<br>echo \$3: $3<br><br>echo \$#: $#<br>echo \$*: $*<br><br>shift 2<br>echo \$#: $#<br>echo \$*: $*</span><br><br>
=INVESTIGATION 3: COMMAND SUBSTITUTION / MATH OPERATIONS=
<br>
In this sectioninvestigation, you will learn how to use '''command substitution''' and '''math operations''' in your shell scripts.
'''Math Operations'''
Since you do NOT have to declare the '''data-type''' of a variable (as opposed to compiled program <br>such as the C-programming language),<br> numbers would be stored as '''text''' in variables. <br>Therefore, it is important to use the construct <span style="color:blue;font-family:courier;font-weight:bold">(( ))</span> to <u>convert</u> numbers (stored as ''text'') into '''numbers'''.
We will now learn how to use this construct in order to perform math operations for shell scripts.
<br><br>
'''Perform the Following Steps:'''
# Confirm that you are located in your '''home''' directory in your Matrix account.<br><br>Let's demonstrate that the Unix/Linux shell stores numbers as ascii text<br>which can cause problems when performing math operations.<br><br># To demonstrate the need for the '''( )''' construct, issue Issue the following Linux command from the shell:<br><span style="color:blue;font-family:courier;font-weight:bold">echo "1 + 2"</span><br><br>What did you notice?<br><br># Issue To demonstrate the need for the '''(( ))''' construct, issue the following Linux commands (using the ''math construct''):<br><span style="color:blue;font-family:courier;font-weight:bold">echo "$((1 + 2))"</span><br><br>What did you notice?<br>The <span style="font-family:courier;font-weight:bold">(( ))</span> construct converted values '''1''' and '''2''' from ''text'' to '''binary numbers'''.<br>The '''$''' in front of the construct '''expands''' the result of the calculation.<br><br>
# Issue the following Linux commands demonstrating other types of math calculations:<br><span style="color:blue;font-family:courier;font-weight:bold">echo "$((2 - 3))"</span><br><span style="color:blue;font-family:courier;font-weight:bold">echo "$((2 * 3))"</span><br><span style="color:blue;font-family:courier;font-weight:bold">echo "$((2 / 3))"</span><br><span style="color:blue;font-family:courier;font-weight:bold">echo "$((2 ** 3))"</span><br><br>'''NOTE:''' You may notice that '''dividing''' '''2''' by '''3''' shows a '''zero''' result. To perform decimal calculations would require<br>the use the '''awk''' or '''bc''' Linux commands (we will '''NOT''' cover that method to work with ''decimal numbers'' in this course).<br><br>You can use the ''math construct'' with variables as well.<br><br>
# Issue the following Linux commands demonstrating using the ''math construct'' with '''variables''':<br><span style="color:blue;font-family:courier;font-weight:bold">num1=34</span><br><span style="color:blue;font-family:courier;font-weight:bold">num2=12</span><br><span style="color:blue;font-family:courier;font-weight:bold">echo "$((num1 * num2))"</span><br><br>What did you notice?<br><br>You can create variables and assign them values in the ''math construct'' as well.<br><br>
# Save your editing changes and exit your text editor.<br><br>[[Image:mathops1.png|thumb|right|275px|Output of a shell script with math operations using the '''math construct'''.]]
# Issue the '''chmod''' command to add execute permissions<br>for the user for the '''dog-years.bash''' file.<br><br>
# Issue the following to run the '''user-variables.bash ''' Bash shell script:<br><span style="color:blue;font-weight:bold;font-family:courier;">./dog-years.bash</span><br><br>Enter <u>your</u> age to see what happens.<br><br># Issue the following to run a checking script:<br><span style="color:blue;font-weight:bold;font-family:courier;">bash /home/murray.saul/myscripts~uli101/week10-check-3 | more</span><br><br>If you encounter errors, make corrections and '''re-run''' the checking script until you<br>receive a congratulations message, then you can proceed.<br><br>
:In the next investigation, you will use '''control-flow statements''' to allow your shell scripts <br>to perform differently under different situations.<br><br>
=INVESTIGATION 4: CONTROL FLOW STATEMENTS =
<br>
In this sectioninvestigation, you will learn how to use '''control-flow statements'''<br>to make your shell script '''behave differently''' under '''different situations or conditions'''.
'''Perform the Following Steps:'''
<br><br>
: You can test conditions by issuing '''Linux commands / pipeline commands''' and by using the '''test''' command.<br><br>
# Confirm that you are located in your '''home''' directory in your Matrix account.<br><br>
# Issue the following Linux commands at the Bash shell prompt to assign values to several variables:<br><span style="color:blue;font-weight:bold;font-family:courier;">course="ULI101"<br>number1=5<br>number2=10</span><br><br>You can test conditions by issuing '''Linux commands / pipeline commands''' <u>or</u><br>by using the '''test''' command. We will demonstrate using the '''test''' command in this tutorial,<br>and then we will demonstrate how to test by issuing a ''Linux command / pipeline command'' in a <u>later</u> tutorial.<br><br># Issue the following Linux command to test a condition:<br><span style="color:blue;font-weight:bold;font-family:courier;">test $course = "ULI101"</span><br><br>The '''$?''' variable is used to store an '''exit status''' of the <u>previously-issued</u> command (including the test command).<br>If the exit status is '''zero''', then it indicates a ''TRUE '' value and if the status is '''non-zero''', then it indicates a ''FALSE '' value.<br><br># Issue the following Linux command to view the '''exit status ''' of the previously-issued '''test''' command:<br><span style="color:blue;font-weight:bold;font-family:courier;">echo $?</span><br><br>Based on the ''exit status'' value, is the result ''TRUE '' or ''FALSE''?<br><br>
# Issue the following Linux command to test another condition:<br><span style="color:blue;font-weight:bold;font-family:courier;">test $course = "uli101"</span><br><br>
# Issue the following Linux command to view the ''exit status '' of the previously-issued '''test''' command:<br><span style="color:blue;font-weight:bold;font-family:courier;">echo $?</span><br><br>Based on the ''exit status'' value, is the result TRUE or FALSE?<br>The value is non-zero (FALSE) since UPPERCASE characters<br>are different than lowercase characters.<br><br>
# Issue the following Linux command to test another condition:<br><span style="color:blue;font-weight:bold;font-family:courier;">test $course != "uli101"</span><br><br>
# Issue a linux command to display the value of '''$?'''<br><br>What is the result? Why?<br><br>
# Issue the following Linux command to test a condition involving earlier assigned variables:<br><span style="color:blue;font-weight:bold;font-family:courier;">test $number1 > $number2</span><br><br>
# Issue a Linux command to display the value of '''$?'''<br><br>'''NOTE:''' You will notice that something is '''wrong'''.<br>The exit status '''$?''' shows a zero (TRUE) value, but the number 5 is definitely NOT greater than 10.<br>The problem is that the symbols '''&lt;''' and '''&gt;''' are interpreted as REDIRECTION symbols!<br><br>
# To prove this, issue the following Linux command :<br><span style="color:blue;font-weight:bold;font-family:courier;">ls -l 10</span><br><br>You should notice a file called "'''10'''". The incorrectly issued '''test''' command '''used redirect redirection'''<br>to create an '''empty ''' file instead,<br> which indeed succeeded just giving and assigning the exit status variable a ''TRUE '' value!<br><br>To prevent problems when issuing the '''test''' command when comparing numbers, <br>you can use the following '''test options''':<br>'''-lt''' (&lt;), '''-le''' (&lt;&#61;), '''-gt''' (&gt;), '''-ge''' (&gt;&#61;;), '''-eq''' (&#61;), '''-ne''' (!&#61;)<br><br># Issue the correct Linux command to '''properly ''' test both values:<br><span style="color:blue;font-weight:bold;font-family:courier;">test $number1 -gt $number2</span><br><br># Issue a Linux command to display the value of '''$?'''.<br><br>You should notice that the exit status value is now ''FALSE '' which is the correct result.<br><br># The '''test''' command can be abbreviated substituted by the '''square brackets ''' '''&#91; &#93;''' which contains the '''test''' condition<br>within the square brackets. You need to have spaces between the brackets and the test condition;<br>otherwise, you will get a test error.<br><br>
# To generate a '''test error''', copy and paste the following '''test''' command:<br><span style="color:blue;font-weight:bold;font-family:courier;">&#91;$number1 -gt $number2&#93;</span><br><br>The reason for the error was that you need '''spaces''' between the '''square brackets''' and the '''test condition'''.<br><br>
# Copy and paste the following (correct) '''test''' command:<br><span style="color:blue;font-weight:bold;font-family:courier;">&#91; $number1 -gt $number2 &#93;</span><br><br>
# Issue a command to view the value of the '''exit status''' of the previously issued '''test''' command.<br>You should notice that is works properly.<br><br>Now that we have learned how to test conditions, let's learn about '''control-flow''' statements.<br><br>'''Logic statementsLOGIC STATEMENTS''' are used to create '''different paths''' or directions that the shell script will take<br>based on the <u>result</u> of the '''test condition'''. In this tutorial,<br>we will only focus on the '''if''' and '''if-else''' logic statementstatements.<br><br># Use a text editor like vi or nano to create the text file called '''if-1.bash''' <br>(eg. <span style="color:blue;font-weight:bold;font-family:courier;">vi if-1.bash</span>)<br><br>
# Enter the following lines in your shell script:<br><span style="font-family:courier;font-weight:bold;">#!/bin/bash<br>num1=5<br>num2=10<br>if [ $num1 -lt $num2 ]<br>then<br>&nbsp;&nbsp;&nbsp;echo "num1 is less than num2"<br>fi</span><br><br>
# Save your editing session and exit the text editor <br>(eg. with vi: press '''ESC''', then type ''':wxx''' followed by '''ENTER''').<br><br>[[Image:if-1.png|thumb|right|200px|Output of a shell script using the '''if''' control-flow statement.]]
# Issue the following Linux command to add execute permissions for your shell script:<br><span style="color:blue;font-weight:bold;font-family:courier;">chmod u+x if-1.bash</span><br><br>
# Run your shell script by issuing: <br><span style="color:blue;font-weight:bold;font-family:courier;">./if-1.bash</span><br><br>Confirm that the output indicated indicates a correct result.<br><br># Use a text editor like vi or nano to create the text file called '''if-2.bash''' <br>(eg. <span style="color:blue;font-weight:bold;font-family:courier;">vi if-2.bash</span>)<br><br>If you are using the nano text editor, refer to notes on text editing in a previous week in the course schedule.<br><br>
# Enter the following lines in your shell script:<br><span style="font-family:courier;font-weight:bold;">#!/bin/bash<br>read -p "Enter the first number: " num1<br>read -p "Enter the second number: " num2<br>if [ $num1 -gt $num2 ]<br>then<br>&nbsp;&nbsp;&nbsp;echo "The first number is greater than the second number."<br>fi</span><br><br>
# Save your editing session and exit the text editor <br>(eg. with vi: press '''ESC''', then type ''':wxx''' followed by '''ENTER''').<br><br>[[Image:if-2.png|thumb|right|320px|Output of a shell script using the '''read''' command and the '''if''' control-flow statement.]]
# Issue the following Linux command to add execute permissions for your shell script:<br><span style="color:blue;font-weight:bold;font-family:courier;">chmod u+x if-2.bash</span><br><br>
# Run your shell script by issuing: <br><span style="color:blue;font-weight:bold;font-family:courier;">./if-2.bash</span><br><br>Confirm When prompted, make certain that the output indicated a correct result'''first number'''<br>is <u>greater than</u> the '''second number'''. What happens?<br><br># Run the <span style="font-weight:bold;font-family:courier;">./if-2.bash</span> Bash shell script again.<br><br>What happens when you enter a When prompted, make certain that the '''first number that '''<br>is <u>less than or equal to </u> the '''second number'''. What happens? <br><br>Let's use an '''if-else''' statement to provide an appropriate '''alternative'''<br>if the condition first number is FALSEless than or equal to the second number.<br><br># Use a text editor like vi or nano to create the text file called '''if-3.bash''' <br>(eg. <span style="color:blue;font-weight:bold;font-family:courier;">vi if-3.bash</span>)<br><br># Enter the following lines in your shell script:<br><span style="font-family:courier;font-weight:bold">#!/bin/bash<br>read -p "Enter the first number: " num1<br>read -p "Enter the second number: " num2<br>if [ $num1 -gt $num2 ]<br>then<br>&nbsp;&nbsp;&nbsp;echo "The first number is greater than the second number."<br>else<br>&nbsp;&nbsp;&nbsp;echo "The first number is less than or equal to the second number."<br>fi</span><br><br>[[Image:if-3.png|thumb|right|330px|Output of a shell script using the '''if-else''' control-flow statement.]]# Save your editing session and exit the text editor <br>(eg. with vi: press '''ESC''', then type ''':wxx''' followed by '''ENTER''').<br><br>[[Image:if-3.png|thumb|right|330px|Output of a shell script using the '''if-else''' control-flow statement.]]
# Issue the following Linux command to add execute permissions for your shell script:<br><span style="color:blue;font-weight:bold;font-family:courier;">chmod u+x if-3.bash</span><br><br>
# Run your shell script by issuing: <br><span style="color:blue;font-weight:bold;font-family:courier;">./if-3.bash</span><br><br>What do you notice? Try running the script several times with numbers '''different ''' and '''equal '''<br>to each other to confirm that the shell script works correctly.<br><br>Let's learn how to use a ''LOOP STATEMENTS'loop'' are a series of steps or sequence of statements executed<br>repeatedly zero or more times satisfying the given condition is satisfied.'' with shell scripting<br>Reference: https://www.chegg. In this tutorialcom/homework-help/definitions/loop-statement-3<br><br>There are several loops, but we will only focus on one simple use with the look at a '''for''' loopusing a '''list'''.<br><br># Use a text editor like vi or nano to create the text file called '''for-1.bash''' <br>(eg. <span style="color:blue;font-weight:bold;font-family:courier;">vi for-1.bash</span>)<br><br>
# Enter the following lines in your shell script:<br><span style="font-family:courier;font-weight:bold;">#!/bin/bash<br>echo<br>for x in 5 4 3 2 1<br>do<br>&nbsp;&nbsp;&nbsp;echo $x<br>done<br>echo "blast-off!"<br>echo</span><br><br>
# Save your editing session and exit the text editor <br>(eg. with vi: press '''ESC''', then type ''':wxx''' followed by '''ENTER''').<br><br>[[Image:for-1.png|thumb|right|125px|Output of a shell script using the '''for''' loop with a '''list'''.]]
# Issue the following Linux command to add execute permissions for your shell script:<br><span style="color:blue;font-weight:bold;font-family:courier;">chmod u+x for-1.bash</span><br><br>
# Run your shell script by issuing: <br><span style="color:blue;font-weight:bold;font-family:courier;">./for-1.bash</span><br><br># Use a text editor like vi or nano to create the text file called '''for-2.bash''' <br>(eg. <span style="color:blue;font-weight:bold;font-family:courier;">vi for-2.bash</span>)<br><br>
# Enter the following lines in your shell script:<br><span style="font-family:courier;font-weight:bold;">#!/bin/bash<br>echo<br>for x<br>do<br>&nbsp;&nbsp;&nbsp;echo $x<br>done<br>echo "blast-off!"<br>echo</span><br><br>
# Save your editing session and exit the text editor <br>(eg. with vi: press '''ESC''', then type ''':wxx''' followed by '''ENTER''').<br><br>
# Issue the following Linux command to add execute permissions for your shell script:<br><span style="color:blue;font-weight:bold;font-family:courier;">chmod u+x for-2.bash</span><br><br>[[Image:for-2.png|thumb|right|175px|Output of a shell script using the '''for''' loop <u>without</u> a '''list'''.]]
# Run your shell script by issuing: <br><span style="color:blue;font-weight:bold;font-family:courier;">./for-2.bash 10 9 8 7 6 5 4 3 2 1</span><br><br>How does this differ from the previous shell script?<br><br>You will learn in a couple of weeks more examples of using loop statements.<br><br>Let's run a '''checking-script''' to confirm that both your '''for-1.bash''' and '''for-2.bash'''<br>Bash shell scripts exist, have execute permissions, and when run, produce<br>the same OUTPUT as required in this tutorial's instructions.<br><br># Issue the following Linux command to run a checking script:<br><span style="color:blue;font-weight:bold;font-family:courier;">bash /home/murray.saul/myscripts~uli101/week10-check-4 | more</span><br><br>If you encounter errors, make corrections and '''re-run''' the checking script until you<br>receive a congratulations message, then you can proceed.<br><br>
# After you complete the Review Questions sections to get additional practice, then work on your '''online assignment 3''',<br>'''sections 2 and 3''' labelled '''Interactive Shell Environment''' and '''Introduction To Scripting (phone)'''.<br><br>
# Write a Bash shell script that clears the screen and displays the text Hello World on the screen.<br><br>What '''permissions ''' are required to run this Bash shell script?<br><br>What are the different ways methods that you can run this Bash shell script from the command line?<br><br># Write a Bash shell script that clears the screen, prompts the user for their '''full name''' and then prompts the user for their '''age''',<br>then clears the screen again and welcomes the user by their name and tells them their age.<br><br>What '''comments ''' would you add to the above script’s contents to properly document this Bash shell script to be understood<br>for those users that would read / edit this Bash shell script’s contents?<br><br># Write a Bash shell script that will first set the value of a read-only variable called '''numberdogFactor''' to '''23''' and make this variable '''read-only7'''.<br>Then the The script will then clear the screen and prompt the user to enter a value for that variable called number to another value.<br>Have the script display the value age of the a dog in human years (which will be stored into a variable called number to prove that it is a read-only variable'''humanYears''').<br><br>When you ran this Bash shell The script, did you encounter an error message?will store in a variable called '''dogYears''' the value of ''humanYears x dogFactor''<br>How would you run this Bash shell The script, so will then clear the screen a second time and then display the age of the error message was NOT displayed?dog in ''“dog years”''.<br><br># Write a Bash shell script that will clear the screen and then display all '''arguments ''' that were entered <u>after </u> your Bash shell script when it was run. Also have the Bash shell script display the '''number of arguments ''' that were entered after your Bash shell script.<br><br><br>
'''PART B: WALK-THRUS'''
</pre>
:WRITE ROUGH WORK AND OUTPUT FROM ISSUING:
:'''./walkthru1.bash'''
 
:ROUGH WORK:
 
:OUTPUT:
 
</pre>
:WRITE ROUGH WORK AND OUTPUT FROM ISSUING:
:'''./walkthru2.bash apple orange banana'''
 
:ROUGH WORK:
 
:OUTPUT:
 
<br><br>
:'''Walkthru #3:'''
 
:'''cat walkthru2.bash'''
<pre>
#!/usr/bin/bash
 
for x in 1 2 3 4 5
do
 
if [ $((x % 2)) -eq 0 ]
then
echo "this"
else
echo "that"
fi
 
done
 
</pre>
 
:WRITE ROUGH WORK AND OUTPUT FROM ISSUING:
:'''./walkthru3.bash apple orange banana'''
 
:ROUGH WORK:
 
:OUTPUT:
[[Category:ULI101]]
13,420
edits

Navigation menu