Open main menu

CDOT Wiki β

Changes

Tutorial 12 - Shell Scripting - Part 2

No change in size, 21:50, 4 August 2023
Fixes Investigation 2 pathing.
# Issue a Linux command to <u>confirm</u> you are located in your '''advanced''' directory in your Matrix account.<br><br>
# Issue the following Linux command to view the <span style="font-family:courier;font-weight:bold;">~./for-1.bash</span> file:<br><span style="color:blue;font-weight:bold;font-family:courier;">more ~./for-1.bash</span>)<br><br>As you should have noticed from '''tutorial 10''' that the '''for''' loop can use a '''list'''.<br>You can also use the for loop with positional parameters stored as '''arguments'''<br>from an executed shell script.<br><br>You can also use the '''for''' loop with a list using '''command substitution'''.<br>Using command sustitution is an effective method to loop within a shell script.<br><br>Before creating a new shell script, let's learn to use command substitution from the Bash Shell<br>to store arguments as positional parameters and use them for practice.<br><br>
# Issue the following linux command to set positional parameters in your current shell:<br><span style="color:blue;font-weight:bold;font-family:courier;">set apples oranges bananas pears</span><br><br>
# Issue the following linux command:<br><span style="color:blue;font-weight:bold;font-family:courier;">echo $#</span><br><br>What do you notice? What does this value represent?<br><br>
# Save your editing session and exit the text editor (eg. with vi: press '''ESC''', then type ''':x''' followed by '''ENTER''').<br><br>
# '''Add execute permissions''' for this shell script and '''run Bash shell script'''<br>What do you notice? Does the output for this shell script differ from '''for-4.bash'''? Why?<br><br>We now want to introduce you to the use of '''error-checking'''.<br><br>
# Use the '''more''' command to view the previously-created Bash shell script '''~./if-5.bash''' (eg. <span style="color:blue;font-weight:bold;font-family:courier;">more ~./if-5.bash</span>)<br><br>Take a few moments to re-familiarize yourself with this shell script<br><br># Run your shell script by issuing: <span style="color:blue;font-weight:bold;font-family:courier;">~./if-5.bash </span><br><br>When prompted, enter a '''letter''' <u>instead</u> of a ''number''. What happens?<br><br>Let's edit the '''for-5.bash''' shell script to perform '''error-checking''' to <u>force</u> the user to enter a numeric value between '''0''' and '''100'''.<br><br>'''NOTE:''' The '''while''' statement can be used with the '''test''' command (or a simple linux command or a linux pipeline command) for error checking. In our case, we will use a pipeline command with extended regular expressions. In order to loop while the result is TRUE (not FALSE), you can use the negation symbol (!) to set the test condition to the opposite.<br><br># Use a text editor like vi or nano to edit the text file called '''~./if-5.bash''' (eg. <span style="color:blue;font-weight:bold;font-family:courier;">vi ~./if-5.bash</span>)<br><br>
# Add the following lines in your shell script <u>IMMEDIATELY AFTER</u> the read statement to prompt the user for a mark:<br><span style="font-family:courier;font-weight:bold;">while ! echo $mark | egrep "^[0-9]{1,}$" > /dev/null 2> /dev/null<br>do<br> &nbsp;&nbsp;&nbsp;read -p "Not a valid number. Enter a mark (0-100): " mark<br>done</span><br><br>
# Save your editing session and exit the text editor (eg. with vi: press '''ESC''', then type ''':x''' followed by '''ENTER''').<br><br>
# Run your shell script by issuing:<br><span style="color:blue;font-weight:bold;font-family:courier;">./if-5.bash</span><br><br>
# When prompted, enter a '''letter''' <u>instead</u> of a ''number''. What happens?<br>Does the shell script allow you to enter an invalid grade like '''200''' or '''-6'''?<br><br>Let's add an '''additional error-checking loop''' to force the user to enter a number between '''0''' and '''100'''.<br><br>Compound operators like '''&&''' and '''||''' can be used with the '''test''' command.<br>Let's use the '''||''' compound criteria to to NOT accept numbers '''outside''' of the range '''0''' to '''100'''.<br><br>
# Use a text editor like vi or nano to edit the text file called '''~./if-5.bash''' (eg. <span style="color:blue;font-weight:bold;font-family:courier;">vi ~./if-5.bash</span>)<br><br>
# Add the following lines in your shell script <u>IMMEDIATELY AFTER</u> the PREVIOUSLY ADDED<br>error-checking '''while''' loop statement to '''force''' the user to enter a valid number (between 1 and 100):<br><span style="font-family:courier;font-weight:bold;">while [ $mark -lt 0 ] || [ $mark -gt 100 ]<br>do<br> &nbsp;&nbsp;&nbsp;read -p "Invalid number range. Enter a mark (0-100): " mark<br>done</span><br><br>
# Save your editing session and exit the text editor (eg. with vi: press '''ESC''', then type ''':x''' followed by '''ENTER''').<br><br>
# Run your shell script by issuing:<br><span style="color:blue;font-weight:bold;font-family:courier;">~./if-5.bash</span><br><br>
# When prompted, enter a '''letter''' <u>instead</u> of a ''number''. What happens?<br>Does the shell script allow you to enter an '''invalid grade''' like '''200''' or '''-6'''?<br><br>Let's reinforce '''math operations''' in a shell script (that you created in '''tutorial 10''') and then incorporate math operations within a loop.<br><br>
# Use a text editor like vi or nano to create the text file called '''for-6.bash''' (eg. <span style="color:blue;font-weight:bold;font-family:courier;">vi for-6.bash</span>)<br><br>