.See /u/faculty/dick/cs320/math/comp.ascii |- white_space::= SP | HT | ... doublequote::="\"", quote:="'", backquote::="`", backslash::="\\". SYNTAX The Bourne shell a pure interpreter for a highly interactive, complex and powerful programming language with syntax based loosely on ALGOL 68. The basic input (from a user or from a file) into the interpreter (sh) is a sequence of pipelined commands. pipeline::= command (input_redirection|) #("|" command) ("|" command output_redirction|). input_redirection::= "<" file | "<<"string. output_redirection::=( ">" | ">>" ) file. command::=command_name #(separator argument), Normally, separator::=whitespace #whitespace. argument::=#(word | string | escaped_symbol ), word::=#(value_shell_variable| value_of_argument | #(char~separator)), A script is a sequence of commands and control structures separated by command separators script::=(command | built_in_structure) #(command_separator (command | built_in_structure)), command_separator::=EOLN #whitespace | semicolon #whitspace. built_in_structure::=assignment | selection | loop | other_command, selection::=if_then_fi | case_esac, loop::= for_do_done | while_do_done | ... . other_command::=exit_statement | echo_statement |... . A shell variable is identified by an identifier: shell_variable::=identifier, value_of_variable::= "$" variable| "${" identifier operator word "}", The "${...}" form is left undefined. Arguments are numbered inside a shell script: script_argument::= digit, value_of_argument::="$"digit. There are several special variables/values: value::=value_of_argument | value_of_variable | "$" ( "$" | "?" | "#" | "!" | ...). string::= double_quoted_string |single_quoted_string|reverse_quoted_string, escaped_symbol::=backslash char, double_quoted_string::= double_quote #( value_of_variable | value_of_argument | #(char~double_quote) | escaped_symbol) double_quote, reverse_quoted_string::=backquote pipeline backquote, single_quoted_string::=quote #(char~quote | escaped_symbol) quote.