![Page 1: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/1.jpg)
Compunet Corporation
Introduction to Unix (CA263)
Round and Round
By
Tariq Ibn AzizDammam Community College
![Page 2: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/2.jpg)
Compunet Corporation
Objectives
• In this lecture you will learn the following loops– the for;– the while; and– the until.
![Page 3: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/3.jpg)
Compunet Corporation
The for Command
• The for command is used to execute a set of commands a specified number of times.
• Here is a loop example that will execute 3 times
for i in 1 2 3do
echo $idone
• Try directly on terminal$ for i in 1 2 3> do> echo $i> done123$
![Page 4: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/4.jpg)
Compunet Corporation
Example for Command$ cat runtbl $1 |nroff –mm –Tlp |lp$• If you want to run the files
memo1 through memo2 you can use the for command
$ for file in memo1 memo2>do> run $file>done$
• The shell permits filename substitution in the list of words in the for command.
for file in memo[1-2]do
run $filedone
![Page 5: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/5.jpg)
Compunet Corporation
Example for Command• If you want to run all of
the files in your current directory.
for file in *do
run $filedone$
• If the file filelist contains a list of the files that you want to run through run.
files=`cat filelist`for file in $filesdo
run $filedone
![Page 6: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/6.jpg)
Compunet Corporation
The $* Variable• If you found that you were using the run program to
process several files at once.
$ cat runfor file in $*do tbl $file |nroff –mm Tlp | lpdone$ $ run memo1 memo2 memo3 memo4
• The $* will be replaced by the four arguments memo1, memo2, memo3, and memo4.
![Page 7: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/7.jpg)
Compunet Corporation
The $* Variable[1]• The $* in for command will be replaced by shell with a b c
$ cat argsecho Number of argument passed is $#for arg in $*do echo $argdone$ $ args a b cNumber of argument passed is 3abc$
![Page 8: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/8.jpg)
Compunet Corporation
The $* Variable[2]
$ args 'a b' cNumber of argument passed is 2abc$
• Even though a b was passed as a single argument to args, the $* in the for command was replaced by shell with a b c, which is three words.
![Page 9: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/9.jpg)
Compunet Corporation
The $@ Variable[1]• The special variable “$@” will be replaced with "$1", "$2" …, the
double quotes are necessary around $@, otherwise it will behave has $*.$ cat args
echo Number of argument passed is $#for arg in "$@"do echo $argdone$ $ args a b cNumber of argument passed is 3abc$
![Page 10: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/10.jpg)
Compunet Corporation
The $@ Variable[2]
$ args 'a b' cNumber of argument passed is 2a bc$
• The special variable “$@” will be replaced with "$1", "$2" …, the double quotes are necessary around $@, otherwise it will behave has $*.
![Page 11: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/11.jpg)
Compunet Corporation
The while Command
• The second type of looping command is while.
$ cat twhilei=1While [ "$i" –le 5 ]doecho $ii=`expr $i + 1`
done
$ twhile12345$
![Page 12: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/12.jpg)
Compunet Corporation
The while Command• The program print each of the
command-line argument one per line.
$ cat prargsWhile [ "$#" –ne 0 ]do
echo $ishift
done$ $ prargs$
$ prargs a b cabc$ prargs 'a b' ca bc$ prargs *addressesnunamephonebookstat
![Page 13: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/13.jpg)
Compunet Corporation
The until Command
• The while command continues execution as long as the command listed after the while returns a zero exit status.
• The until command is similar to the while, only it continues execution as long as the command follows the until returns a nonzero exit status.
![Page 14: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/14.jpg)
Compunet Corporation
Example-1 until Command[1]
$ cat monif [ "$#" –ne 1 ]thenecho "Usage: mon user"exit 1
fiuntil who | grep "^$user ">/dev/nulldosleep 60
doneecho " $user has logged on“$
![Page 15: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/15.jpg)
Compunet Corporation
Example-1 until Command[2]
$ mon sandysandy has logged on$ mon sandy &4392$ nroff newmemo do other work…sandy has logged on
![Page 16: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/16.jpg)
Compunet Corporation
Example-2 until Command[1]
$ cat monif [ "$1" = -m ]then
mailopt=TRUEshift
elsemailopt=FALSE
fiif [ "$#" –eq 0 –o "$#" –gt 1
]then
echo "Usage: mon [-m] user"echo "-m means to be informed by mail"exit 1
fiuser="$1"
until who|grep "^$user ">/dev/nulldo
sleep 60doneif [ "$mailopt" =FALSE ]then
echo " $user has logged on"else
echo " $user has logged on"|mail steve
fi$$ man sandy –mUsage: mon [-m] user-m means to be informed by mail
![Page 17: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/17.jpg)
Compunet Corporation
Example-2 until Command[2]
$ mon –m sandy &$ mon sandy &5435$ nroff newmemo do other work…you have mail$ mailFrom steve Mon Jul 22 11:05 EDT 1985sandy has logged on?d$
![Page 18: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/18.jpg)
Compunet Corporation
More on Loops
• Breaking Out of a Loop– Sometime you want to make an immediate exit
from a loop. You can use the break command.– If the break command is used in break n form,
then the n innermost loops are immediately exited.
![Page 19: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/19.jpg)
Compunet Corporation
Example break Command• Both the while and for
loop will be exited if error is nonnull
for filedo … while [ "$count" –lt 10 ] do …
if [ -n "$error" ]then
break 2fi…
done …done
![Page 20: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/20.jpg)
Compunet Corporation
Skipping the Remaining Commands in Loop
• The continue command is similar to break, only it doesn’t cause the loop to be exited, but the remaining commands in the loop to be skipped.
• Like the break, an optional number can follow the continue, so continue n causes the commands in the innermost n loops to be skipped; but execution of loop then continues as normal.
![Page 21: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/21.jpg)
Compunet Corporation
Example continue Command
• Each value of file is checked to make sure that file exist.
for filedo if [ ! -f "$file" ]thenecho "$file not found"continuefi…
done
![Page 22: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/22.jpg)
Compunet Corporation
Executing a loop in the Background
• An entire loop can be sent to the background simply by placing an ampersand after the done:
$ for file in memo[1-4]>do> run $file>done &9932$
![Page 23: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/23.jpg)
Compunet Corporation
I/O Redirection on a Loop
• You can also perform I/O redirection on the entire loop.
$ for i in 1 2 3 4
>do> echo $i>done > loopout
$ cat loopout1234
![Page 24: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/24.jpg)
Compunet Corporation
I/O Redirection on a Loop• You can override redirection of the entire loop’s
input or output by explicitly redirecting the input and/or output of commands inside the loop.
for filedoecho "Processing file $file" >/dev/tty…
done > output• echo’s output is redirected to the terminal while
the rest goes to the file output.
![Page 25: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/25.jpg)
Compunet Corporation
I/O Redirection on a Loop
• You can also redirect the standard error output from a loop, simply by tacking on a 2> file after the done:
while [ "$endofdata" –ne TRUE ]do…
done 2> errors
![Page 26: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/26.jpg)
Compunet Corporation
Piping Data Into and Out of a Loop
• A command output can be piped into a loop, and the entire output from a loop can be piped into another command in the executed manner.
$ for i in 1 2 3 4>do> echo $i>done | wc –l4$
![Page 27: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/27.jpg)
Compunet Corporation
Typing a Loop on One Line
for i in 1 2 3 4doecho $i
done
becomes
for i in 1 2 3 4; do echo $i; done
![Page 28: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/28.jpg)
Compunet Corporation
Typing condition on One Line
• The same rules apply to while and until loops. if commands can also be typed on the same line using a similar format:
$ if [ 1 = 1 ]; then echo yes; fiyes$ if [ 1 = 2 ]; then echo yes; else echo no; fino
• Note that no semicolons appear after the then and the else.
![Page 29: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/29.jpg)
Compunet Corporation
The getopts Command
• The shell provide a built-in command getopts that exist for the express purpose of processing command line argument.
• The general format of the command is:
getopts options variable
![Page 30: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/30.jpg)
Compunet Corporation
The getopts Command
• The getopts command is designed to be executed inside a loop. – Each time through the loop, getopts examines the
next command line argument and determine if it is a valid option.
– This check if the argument begins with a minus sign and is followed by any single letter contained inside option. If it does, getopts stores the matching option letter inside the specified variable and returns a zero exit status.
![Page 31: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/31.jpg)
Compunet Corporation
The getopts Command
• If the letter that follows the minus sign is not listed in options, getopts stores a question mark inside variable before returning with a zero exit status. It also writes an error message to standard error.
• If there are no more arguments left on the command line or if the next argument doesn’t begin with a minus sign, getopts return a nonzero exit status.
![Page 32: Compunet Corporation Introduction to Unix (CA263) Round and Round By Tariq Ibn Aziz Dammam Community College](https://reader035.vdocument.in/reader035/viewer/2022062413/5a4d1b7a7f8b9ab0599b8bdf/html5/thumbnails/32.jpg)
Compunet Corporation
The getopts Command
• Suppose you want getopts to recognize the options –a, -i, and –r for a command called foo. Your getopts call might look like this:
• getopts air option