Changes

Jump to: navigation, search

Tutorial10: Shell Scripting - Part 1

538 bytes added, 18 March
no edit summary
<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.
# 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/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/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>
13,016
edits

Navigation menu