\HAPbookmark{}{section.0.1}{Aim}{2}{section.0} \HAPbookmark{}{section.0.2}{Why Shell Scripting?}{3}{section.0} \HAPbookmark{}{section.0.3}{Where to get more information}{4}{section.0} \HAPbookmark{}{section.0.4}{The Shell is an Interpreter}{5}{section.0} \HAPbookmark{}{section.0.5}{The Shebang}{6}{section.0} \HAPbookmark{}{section.0.6}{Making the script executable}{7}{section.0} \HAPbookmark{}{section.0.7}{Special Characters}{8}{section.0} \HAPbookmark{}{section.0.8}{Special Characters---continued: 2}{9}{section.0} \HAPbookmark{}{section.0.9}{Special Characters---continued: 3}{10}{section.0} \HAPbookmark{}{section.0.10}{Quoting}{11}{section.0} \HAPbookmark{}{section.0.11}{Quoting---2}{12}{section.0} \HAPbookmark{}{section.0.12}{Quoting---When to use it?}{13}{section.0} \HAPbookmark{}{section.0.13}{True and False}{14}{section.0} \HAPbookmark{}{section.0.14}{Variables---1}{15}{section.0} \HAPbookmark{}{section.0.15}{Variables---Assignments}{16}{section.0} \HAPbookmark{}{section.0.16}{Variables---Local to Script}{17}{section.0} \HAPbookmark{}{section.0.17}{Variables---Unsetting Them}{18}{section.0} \HAPbookmark{}{section.0.18}{Command-line Parameters}{19}{section.0} \HAPbookmark{}{section.0.19}{Special Built-in Variables}{20}{section.0} \HAPbookmark{}{section.0.20}{Variables: use Braces \texttt {\$\{\dots \}}}{21}{section.0} \HAPbookmark{}{section.0.21}{Braces and Parameters after \textbf {\$9}}{22}{section.0} \HAPbookmark{}{section.0.22}{More about Quoting}{23}{section.0} \HAPbookmark{}{section.0.23}{Command Substitution}{24}{section.0} \HAPbookmark{}{section.0.24}{Command Substitution---Example}{25}{section.0} \HAPbookmark{}{section.0.25}{Conditions---String Comparisons}{26}{section.0} \HAPbookmark{}{section.0.26}{Conditions---Integer Comparisons}{27}{section.0} \HAPbookmark{}{section.0.27}{Conditions---File Tests, NOT Operator}{28}{section.0} \HAPbookmark{}{section.0.28}{Conditions---Combining Comparisons}{29}{section.0} \HAPbookmark{}{section.0.29}{Arithmetic Assignments}{30}{section.0} \HAPbookmark{}{section.0.30}{Arithmetic Expressions with \texttt {\$((\dots ))}}{31}{section.0} \HAPbookmark{}{section.0.31}{Arithmetic Conditions with \texttt {((\dots ))}}{32}{section.0} \HAPbookmark{}{section.0.32}{\texttt {if} Statement}{33}{section.0} \HAPbookmark{}{section.0.33}{\texttt {while} Statement}{34}{section.0} \HAPbookmark{}{section.0.34}{\texttt {for} Statement}{35}{section.0} \HAPbookmark{}{section.0.35}{\texttt {for} Loops: Another Example}{36}{section.0} \HAPbookmark{}{section.0.36}{\texttt {for} Loops: second, C-like syntax}{37}{section.0} \HAPbookmark{}{section.0.37}{\texttt {break} and \texttt {continue}}{38}{section.0} \HAPbookmark{}{section.0.38}{Blocks: \texttt {\{\dots \}}}{39}{section.0} \HAPbookmark{}{section.0.39}{Error Handling: \texttt {\textbar \textbar }, \texttt {\&\&} and \texttt {exit}}{40}{section.0} \HAPbookmark{}{section.0.40}{Output: \texttt {echo} and \texttt {printf}}{41}{section.0} \HAPbookmark{}{section.0.41}{Input: the \texttt {read} Command}{42}{section.0} \HAPbookmark{}{section.0.42}{\texttt {set}: Splitting a Multi-Word Variable}{43}{section.0} \HAPbookmark{}{section.0.43}{More about \texttt {set}, and \texttt {IFS}}{44}{section.0} \HAPbookmark{}{section.0.44}{Example: Changing \texttt {IFS}}{45}{section.0} \HAPbookmark{}{section.0.45}{\texttt {case} Statement}{46}{section.0} \HAPbookmark{}{section.0.46}{\texttt {case} Statement: Example}{47}{section.0} \HAPbookmark{}{section.0.47}{\texttt {shift}: Move all Parameters Up}{48}{section.0} \HAPbookmark{}{section.0.48}{\texttt {shift}: Many Places}{49}{section.0} \HAPbookmark{}{section.0.49}{Command-Line Options---1}{50}{section.0} \HAPbookmark{}{section.0.50}{Command-Line Options---2}{51}{section.0} \HAPbookmark{}{section.0.51}{Command-Line Options---3}{52}{section.0} \HAPbookmark{}{section.0.52}{\texttt {getopts}: Command-Line Options---4}{53}{section.0} \HAPbookmark{}{section.0.53}{\texttt {getopts}: Command-Line Options---5}{54}{section.0} \HAPbookmark{}{section.0.54}{Temporary Files: \texttt {mktemp}}{55}{section.0} \HAPbookmark{}{section.0.55}{Signals that may Terminate your Script}{56}{section.0} \HAPbookmark{}{section.0.56}{Signals: \texttt {trap}}{57}{section.0} \HAPbookmark{}{section.0.57}{Signals: \texttt {trap} Example}{58}{section.0} \HAPbookmark{}{section.0.58}{Functions}{59}{section.0} \HAPbookmark{}{section.0.59}{Parameters in Functions}{60}{section.0} \HAPbookmark{}{section.0.60}{Example, Calling a Function}{61}{section.0} \HAPbookmark{}{section.0.61}{Debugging Shell Scripts---1}{62}{section.0} \HAPbookmark{}{section.0.62}{Debugging Shell Scripts---2}{63}{section.0} \HAPbookmark{}{section.0.63}{Writing Shell Scripts}{64}{section.0} \HAPbookmark{}{section.0.64}{Useful External Programs---1}{65}{section.0} \HAPbookmark{}{section.0.65}{Useful External Programs---2}{66}{section.0} \HAPbookmark{}{section.0.66}{Regular Expressions}{67}{section.0} \HAPbookmark{}{section.0.67}{What is in a Regular Expression?}{68}{section.0} \HAPbookmark{}{section.0.68}{Literal characters}{69}{section.0} \HAPbookmark{}{section.0.69}{Character Classes: \texttt {[\dots ]}}{70}{section.0} \HAPbookmark{}{section.0.70}{Negated Character Classes: \texttt {[\textasciicircum \dots ]}}{71}{section.0} \HAPbookmark{}{section.0.71}{Match Any Character}{72}{section.0} \HAPbookmark{}{section.0.72}{Matching the Beginning or End of Line}{73}{section.0} \HAPbookmark{}{section.0.73}{Match Repetitions: \texttt {*}, \texttt {?}, \texttt {+}, \texttt {\{n\}}, \texttt {\{n,m\}}}{74}{section.0} \HAPbookmark{}{section.0.74}{Matching Alternatives: ``\texttt {\textbar }''}{75}{section.0} \HAPbookmark{}{section.0.75}{Putting it All Together: Examples}{76}{section.0} \HAPbookmark{}{section.0.76}{Basic \texttt {awk}}{77}{section.0} \HAPbookmark{}{section.0.77}{What Does \texttt {awk} Do?}{78}{section.0} \HAPbookmark{}{section.0.78}{\texttt {awk} Examples}{79}{section.0} \HAPbookmark{}{section.0.79}{\texttt {sed}---the Stream Editor}{80}{section.0} \HAPbookmark{}{section.0.80}{\texttt {sed}---Backreferencees}{81}{section.0} \HAPbookmark{}{section.0.81}{\texttt {sed}---Backreferencees: Example}{82}{section.0} \HAPbookmark{}{section.0.82}{\texttt {find} Examples}{83}{section.0} \HAPbookmark{}{section.0.83}{Finding SUID Programs}{84}{section.0} \HAPbookmark{}{section.0.84}{A \texttt {find} Example with Many Options}{85}{section.0} \HAPbookmark{}{section.0.85}{\texttt {rpm} Database Query Commands}{86}{section.0}