Lecture Twelve
More Scripting
Control Structures
if-then-elif-else
to control script according to number of arguments:
if [ $# = 0 ] then
echo Usage: cmd argument1 argument2 ... 1>&2 exit 1
elif [ $# = 1 ]
then . .
elif [ $# = 2 ]
then . .
else
. .
fi</code>
for-in
for
is used to execute statements for a specifed number of repetitions- a loop variable takes the values of a specified list, one at a time
for example, to process a list of strings:
for animal in lion tiger bear do echo $animal done
to process the arguments passed to a script as a list of strings:
for var in $* do echo $var done
to process filenames in a directory, using command substitution:
for file in $(ls -a $1) do echo $file done
or, to process filenames in a directory, including path information:
for file in $1/* do echo $file done
for
for
without the "in" keyword - loop variable takes value of variables $1, $2, $3, etc.for args # Note that "args" is a user-defined variable do echo $args done
while
- while control structure, loop while test remains true (0 return code)
to read from the keyboard:
while [ "$input" != end ] do printf "OK, give me more: " read input printf "You typed: '$input'\n" done
to read from a file:
while read input do echo "Input line is: $input" done < file1
another way to read from a file:
cat file1 | while read input do echo "Input line is: $input" done
note that the file has to be opened to the while loop, not to the read statement
for example, the following would not work, the first line of the file would be printed continuously:
while read input < file1 do echo "Input line is: $input" done