Shells and Shell Scripts comp 444/5201



Yüklə 462 b.
tarix08.10.2017
ölçüsü462 b.
#3732


Shells and Shell Scripts

  • COMP 444/5201

  • Revision 1.3

  • January 25, 2005


Content

  • Shells and Shell Scripts

  • tcsh, enhanced C-Shell

  • bash, Bourne-Again Shell



Shell Commands

  • Shell commands are interpreted directly by the shell you specify.

  • The commands are similar to the statement in some programming languages, such as C.

  • Popular shells include:

    • Enhanced C-shell tchs (csh+)
    • Bourne-Again Shell, bash (sh+)
    • Korn Shell (ksh)
  • These notes will focus on the first two shells.



Shells’ Features

  • The bash an tcsh shells are similar in the features the offer. In particular:

    • Pass arguments to your script
    • Set and reference variables
    • Use of control flow
    • Interact with the user (read user input)
    • Comments…
  • Info on commands a given shell offers can be found in the man pages for that shell.

  • There are many Linux/UNIX references that give detailed information and tips.



Shell Scripts

  • What are they for?

    • To automate certain common activities an user performs routinely.
    • They serve the same purpose as batch files in DOS/Windows.
    • Example:
      • rename 1000 files from upper case to lowercase


What are Shell Scripts

  • Just text/ASCII files with:

    • a set of standard UNIX/Linux commands (ls, mv, cp, less, cat, etc.) along with
      • flow of control
        • some conditional logic and branching (if-then),
        • loop structures (foreach, for, while), and
      • I/O facilities (echo, print, set, ...).
    • They allow use of variables.
    • They are interpreted by a shell directly.
    • Some of them (csh, tcsh) share some of C syntax.
    • DOS/Win equivalent - batch files (.bat)


Why not use C/C++ for that?

  • C/C++ programming requires compilation and linkage, maybe libraries, which may not be available (production servers).

  • For the typical tasks much faster in development, debugging, and maintenance (because they are interpreted and do not require compilation).



Shell Script Invocation

  • Specify the shell directly:

    • % tcsh myshellscript
    • % tcsh -v myshellscript (-v = verbose, useful for debugging)
  • Make the shell an executable first and then run is a command (set up an execution permission):

    • % chmod u+x myshellscript
  • Then either this:

    • % myshellscript (if the path variable has ‘.’ in it; security issue!)
  • Or:

    • % ./myshellscript (should always work)


Shell Script Invocation (2)

  • If you get an error: “myshellscrip: command not found”

    • The probably “.” is not in your path or there’s no execution bit set.
  • When writing scripts, choose unique names, that preferably do not match system commands.

    • Bad name would be test for example, since there are many shells with this internal command.
  • To disambiguate, always precede the shell with “./” or absolute path in case you have to name your thing not very creatively.



Start Writing a Shell Script

  • The very first line, often called 'shebang' (#!) should precede any other line, to assure that the right shell is invoked.

  • Comments start with '#', with the exception of #!, $#, which are a special character sequences.

  • Everything on a line after # is ignored if # is not a part of a quoted string or a special character sequence.



tchs Quick Ref



Variables

  • Variables start with a $ sign when they are used.

    • $x, $val
  • There's no $ when a variable is declared.

    • set x = 3
    • @ y = 1
    • set input = "$<"
  • There are some system, predefined variables:

    • $0, $1, $3 .... - argument references (arguments themselves)
    • $* - all the arguments
    • $< - user's input from STDIN
    • $# - # of arguments passed to the script


if

  • if ( ) then

  • else if ( ) then

  • else

  • endif



foreach

  • foreach var ( )

  • end



switch

  • switch ( string )

  • case str1:

  • breaksw

  • ...

  • default:

  • breaksw

  • endsw



while

  • while ( )

  • end



File Inquiry Operators: -op file



Example

  • See creator and uptolow.

  • NOTE: run them in a some temporary directory to do not mess with your own valuable files.

  • The uptolow script:

    • will convert any uppercase letters in an ordinary file name to lowercase.
    • will leave directories untouched.


Bourne Shell Quick Ref



Quick Note

  • In no way this going to be a duplication for the zillions of resources on Bourne Shell, but more a quick reference/syntax for most often used constructs and pointers to resources where else to find that kind of stuff. Some of it is a lame reap off the man page and so on.



Quick Resource Summary

  • Manual Pages: man bash

  • An Intro to UNIX Shell:

  • How To Write a Shell Script:



Bourne Shell Script Constructs Reference

  • System/Internal Variables

  • Control Flow (if, for, case)



Internal Variables



Internal Variables (2)

  • Use shift command to shift the arguments one left:

    • Assume intput:
      • ./shift.sh 1 2 foo bar
        • $0 = /shift.sh
        • $1 = 1
        • $3 = 2
        • $4 = foo
        • $5 = bar
      • shift:
        • $1 = 2
        • $2 = foo
        • $3 = bar


Environment

  • These (and very many others) are available to your shell:

    • $PATH - set of directories to look for commands
    • $HOME - home directory
    • $MAIL
    • $PWD – personal working directory
    • $PS1 – primary prompt
    • $PS2 – input prompt
    • $IFS - what to treat as blanks


Control Flow: if

  • General Syntax:

  • can either be a logical expression or a command and usually a combo of both.



if (2)

  • Some Logical “Operators”:

    • -eq --- Equal
    • -ne --- Not equal
    • -lt --- Less Than
    • -gt --- Greater Than
    • -o --- OR
    • -a --- AND
  • File or directory?

    • -f --- file
    • -d --- directory


case

  • Syntax:



case (2)

  • case $# in

  • 1) cat >> $1

  • ;;

  • 2) cat >>$2 <$1

  • ;;

  • 3) case $3 in

  • -[abc]) echo "-a -b or -c"

  • ;;

  • -foo|-bar) echo "-foo or -bar"

  • ;;

  • esac

  • ;;

  • *) echo "we accept up to 3 args only."; exit 127

  • ;;

  • esac



for

  • Syntax:

  • List can also be a result of a command.



for (3)

  • for file in *.txt

  • do

  • echo File $file:

  • echo "======"

  • cat $file

  • echo "======"

  • done



while

  • Syntax



until

  • Syntax



To Be Continued...



Yüklə 462 b.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə