On-line Guides

How To Guides






Advanced Bash-Scripting Guide:
Prev Appendix M. ExercisesNext

M.1. Analyzing Scripts

Examine the following script. Run it, then explain what it does. Annotate the script and rewrite it in a more compact and elegant manner.

#!/bin/bash
MAX=10000
 for((nr=1; nr<$MAX; nr++))
 do
 let "t1 = nr % 5"
 if [ "$t1" -ne 3 ]
 then
 continue
 fi
 let "t2 = nr % 7"
 if [ "$t2" -ne 4 ]
 then
 continue
 fi
 let "t3 = nr % 9"
 if [ "$t3" -ne 5 ]
 then
 continue
 fi
 break # What happens when you comment out this line? Why?
 done
 echo "Number = $nr"
exit 0

---

Explain what the following script does. It is really just a parameterized command-line pipe.

#!/bin/bash
DIRNAME=/usr/bin
FILETYPE="shell script"
LOGFILE=logfile
file "$DIRNAME"/* | fgrep "$FILETYPE" | tee $LOGFILE | wc -l
exit 0

---

A reader sent in the following code snippet.

while read LINE
do
 echo $LINE
done < `tail -f /var/log/messages`
He wished to write a script tracking changes to the system log file, /var/log/messages. Unfortunately, the above code block hangs and does nothing useful. Why? Fix this so it does work. (Hint: rather than redirecting the stdin of the loop, try a pipe.)

---

Analyze Example A-10, and reorganize it in a simplified and more logical style. See how many of the variables can be eliminated, and try to optimize the script to speed up its execution time.

Alter the script so that it accepts any ordinary ASCII text file as input for its initial "generation". The script will read the first $ROW*$COL characters, and set the occurrences of vowels as "living" cells. Hint: be sure to translate the spaces in the input file to underscore characters.


Prev Home Next
ExercisesUp Writing Scripts
Published under the terms of the GNU General Public License Design by Interspire

AltStyle によって変換されたページ (->オリジナル) /