Blob Blame History Raw
<sect1 id="scripts-bash-cliref">

    <title>The Command-line Interface</title>

    <para>
        The <command>centos-art.sh</command> script follows a
        conventional command-line interface where there might be
        options and non-option arguments in it. As convention, the
        first non-option argument passed to
        <command>centos-art.sh</command> script will be the name of
        the specific function you want to execute (e.g.,
        <function>render</function>, <function>locale</function>,
        <function>help</function>, etc.).  This first argument will be
        immediately removed from the list of arguments passed to
        <command>centos-art.sh</command> script to leave just the
        remaining options and non-option arguments passed to it.  At
        this point, the <command>centos-art.sh</command> script uses
        the <command>getopt</command> command to retrieve option
        arguments and remove them from the list of arguments passed to
        <command>centos-art.sh</command> script.
    </para>

    <para>
        Once option arguments have been removed from list of arguments
        passed to <command>centos-art.sh</command> script, non option
        arguments are processed then.  Non-option arguments will
        always be paths pointing directories inside your working copy
        of &TCAR;. These paths can be absolute paths or relative paths
        considering the working copy root directory as sect2. For
        example, both the absolute path <filename
        class="directory">/home/al/Projects/CentOS/artwork/trunk/Identity/Themes/</filename>
        and the relative path <filename
        class="directory">trunk/Identity/Themes</filename> point to
        the same location.
    </para>

    <para>
        To better understand the <command>centos-art.sh</command>
        command-line interface, let's consider the real command shown
        in <xref linkend="scripts-bash-cliref-cli-example1" /> as
        sect2.  This command shows the entire command as a list of
        space-separated arguments. The value of each argument can be
        reached using special variable names based on the number of
        arguments passed to the command-line.
    </para>

    <example id="scripts-bash-cliref-cli-example1">
    <title>The command-line interface</title>
    <screenshot>
    <screeninfo>The command-line interface</screeninfo>
    <mediaobject>
    <textobject>
<programlisting>
   ${0}  | |${1}| |          ${2}            | |    ${3}   |
---------|-|----|-|--------------------------|-|-----------|
centos-art render trunk/Identity/Images/Themes --with-brands
---------|-|----|-|--------------------------|-|-----------|
</programlisting>
    </textobject>
    </mediaobject>
    </screenshot>
    </example>

    <para>
        In <xref linkend="scripts-bash-cliref-cli-example1" />, the
        relation between special variables and arguments has the
        following meaning:
    </para>

    <variablelist>
    <varlistentry>
    <term><varname>${0}</varname></term>
    <listitem>
    <para>
        This variable contains the absolute path to the command
        executed. In case your home directory be <filename
        class="directory">/home/john</filename> the value of this
        argument will be expanded to
        <filename>/home/john/bin/centos-art</filename> which is a
        symbolic link to the
        <filename>${TCAR_WORKDIR}/trunk/Scripts/Bash/centos-art.sh</filename>
        file.
    </para>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term><varname>${1}</varname></term>
    <listitem>
    <para>
        This variable contains the first non-option argument we use to
        determine the specific function environment we want to execute
        (e.g., <function>render</function> in this case). The position
        of this information in the command-line is relevant to
        <command>centos-art.sh</command> script and must not be
        changed. Possible values to this variable are specified in
        <xref linkend="scripts-bash-cli-specificfuncs" />.
    </para>

    </listitem>
    </varlistentry>

    <varlistentry>
    <term><varname>${2}</varname></term>
    <listitem>
    <para>
        This variable contains a non-option argument referring a path
        information inside the working copy of &TCAR;. The specific
        path information you provide in this variable must be
        recognized by specific function environment provided in
        <varname>${1}</varname> variable. The position of path
        information in the command-line is not relevant to
        <command>centos-art.sh</command> script and can be changed
        whenever it doesn't be interpreted as value to
        <varname>${1}</varname> variable.
    </para>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term><varname>${3}</varname></term>
    <listitem>
    <para>
        This variable contains an option argument. The specific option
        information you provide in this variable must be recognized by
        specific function environment provided in
        <varname>${1}</varname> variable. The position of options in
        the command-line is not relevant to
        <command>centos-art.sh</command> script and can be changed
        whenever it doesn't be interpreted as value to
        <varname>${1}</varname> variable.
    </para>
    </listitem>
    </varlistentry>

    </variablelist>

    <sect2 id="scripts-bash-cli-commonoptions">
    <title>Common Options</title>

    <para>
        As convention, all function specific environments should
        provide support for the following common options: 
    </para>

    <variablelist>
    <varlistentry>
    <term><option>-h</option> | <option>--help</option></term>
    <listitem>
    <para>
        This option makes <command>centos-art.sh</command> script to
        shows information about the specific function environment
        (e.g., how to execute it, available options, etc.) set as
        first non-option argument. For example, if you provide the
        <command>centos-art render --help</command>, the
        <command>centos-art.sh</command> script will display to you
        the information related to the <filename
        class="directory">trunk/Scripts/Bash/Functions/Render</filename>
        directory.
    </para>
    <para>
        This information is retrived from <quote>The CentOS Artwork
        Repository File System (tcar-fs)</quote> documentation manual.
        This manual is written in Texinfo format and provides a quick
        way for you to read and browse documentation related to each
        directory inside &TCAR; as you work with it from a text
        terminal.
    </para>
    </listitem>
    </varlistentry>

    <varlistentry>
    <term><option>-q</option> | <option>--quiet</option></term>
    <listitem>
    <para>
        This option makes the <command>centos-art.sh</command> script
        to suppress messages sent to standard output. This option
        doesn't suppress error messages, nor questions related to
        script execution.
    </para>
    </listitem>
    </varlistentry>

    </variablelist>
    </sect2>

    <sect2 id="scripts-bash-cli-specificoptions">
    <title>Specific Options</title>

    <para>
        The specific options used by specific and common function
        environments are described in their respective sect2s. See
        <xref linkend="scripts-bash-cli-specificfuncs" /> and <xref
        linkend="scripts-bash-cli-commonfuncs" /> to know which these
        sect2s are.
    </para>

    <table id="scripts-bash-cli-specificfuncs">
    <title>Specific Function Environments</title>
    <tgroup cols="2" align="left">
    <thead>
        <row>
            <entry>Name</entry>
            <entry>Description</entry>
        </row>
    </thead>

    <tbody>
        <row>
            <entry><xref linkend="scripts-bash-prepare" /></entry>
            <entry>Standardize configuration tasks inside &TCAR;</entry>
        </row>
        <row>
            <entry><xref linkend="scripts-bash-render" /></entry>
            <entry>Standardize rendition tasks inside &TCAR;</entry>
        </row>
        <row>
            <entry><xref linkend="scripts-bash-locale" /></entry>
            <entry>Standardize localization tasks inside &TCAR;</entry>
        </row>
        <row>
            <entry><xref linkend="scripts-bash-help" /></entry>
            <entry>Standardize documentation tasks inside &TCAR;</entry>
        </row>
        <row>
            <entry><xref linkend="scripts-bash-pack" /></entry>
            <entry>Standardize packing tasks inside &TCAR;</entry>
        </row>
        <row>
            <entry><xref linkend="scripts-bash-tuneup" /></entry>
            <entry>Standardize maintainance tasks inside &TCAR;</entry>
        </row>
        <row>
            <entry><xref linkend="scripts-bash-svn" /></entry>
            <entry>Standardize version control tasks inside &TCAR;</entry>
        </row>
    </tbody>
    
    </tgroup>
    </table>

    <table id="scripts-bash-cli-commonfuncs">
    <title>Common Function Environments</title>
    <tgroup cols="2" align="left">
    <thead>
        <row>
            <entry>Name</entry>
            <entry>Description</entry>
        </row>
    </thead>

    <tbody>
        <row>
            <entry><literal>cli_checkFiles</literal></entry>
            <entry>...</entry>
        </row>
    </tbody>
    
    </tgroup>
    </table>

    </sect2>

    <sect2 id="scripts-bash-cliref-implementation">

        <title>Implementation</title>

        <para>
            When a new function is created to
            <command>centos-art.sh</command> script, it is necessary
            to consider whether it will use arguments or not. When the
            function doesn't need arguments (e.g., it exists to
            redefine values related to global variables only) there is
            no need to consider a parsing feature for it.  However,
            when the function does use arguments it is very important
            to parse them appropriately (e.g., by using a parsing feature like
            that provided by <command>getopt</command> command).
        </para>

        <para>
            In this sect2 will describe how to parse arguments (both
            option and non-option) inside the
            <command>centos-art.sh</command> script.  This information
            must be used as sect2 whenever you need to create a
            new function for <command>centos-art.sh</command> script.
        </para>

    </sect2>

</sect1>