13,420
edits
Changes
→INVESTIGATION 1: CREATING A SHELL SCRIPT
=INVESTIGATION 1: CREATING A SHELL SCRIPT=
<span style="color:red;">'''ATTENTION''': Depending on your ULI101 instruction, you may be required to complete this tutorial for marks in the course.<br>Please refer to your instructor's course notes in terms of marked assigned to the 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 purposes.</span><br><br> In this sectioninvestigation, you will learn how to create and run a '''Bash Shell script'''.
=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.
=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.
=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''.
<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 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 '''<''' and '''>''' 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 redirection'''<br>to create an '''empty ''' file 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''' (<), '''-le''' (<=), '''-gt''' (>), '''-ge''' (>=;), '''-eq''' (=), '''-ne''' (!=)<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 substituted by '''square brackets''' '''[ ]''' 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;">[$number1 -gt $number2]</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;">[ $number1 -gt $number2 ]</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> 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 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> 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> echo "The first number is greater than the second number."<br>else<br> 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> 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> 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/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]]