1 / 34

Shells and Shell Scripts

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.

latif
Télécharger la présentation

Shells and Shell Scripts

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Shells and Shell Scripts COMP 444/5201 Revision 1.3 January 25, 2005 Serguei A. Mokhov, mokhov@cs.concordia.ca

  2. Content • Shells and Shell Scripts • tcsh, enhanced C-Shell • bash, Bourne-Again Shell Serguei A. Mokhov, mokhov@cs.concordia.ca

  3. 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. Serguei A. Mokhov, mokhov@cs.concordia.ca

  4. 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. Serguei A. Mokhov, mokhov@cs.concordia.ca

  5. 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 Serguei A. Mokhov, mokhov@cs.concordia.ca

  6. 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) Serguei A. Mokhov, mokhov@cs.concordia.ca

  7. 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). Serguei A. Mokhov, mokhov@cs.concordia.ca

  8. 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) Serguei A. Mokhov, mokhov@cs.concordia.ca

  9. 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. Serguei A. Mokhov, mokhov@cs.concordia.ca

  10. 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. #!/bin/tcsh #!/bin/bash # This is for tcsh # For Bourne-Again Shell #!/bin/sh # This is for Bourne Shell Serguei A. Mokhov, mokhov@cs.concordia.ca

  11. tchsQuick Ref Serguei A. Mokhov, mokhov@cs.concordia.ca

  12. 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 Serguei A. Mokhov, mokhov@cs.concordia.ca

  13. if if( <expression> ) then <statements> else if ( <another-expression> ) then <statements> else <statements> endif Serguei A. Mokhov, mokhov@cs.concordia.ca

  14. foreach foreach var ( <list-of-values> ) <statements> end Serguei A. Mokhov, mokhov@cs.concordia.ca

  15. switch switch ( string ) case str1: <statements> breaksw ... default: <statements> breaksw endsw Serguei A. Mokhov, mokhov@cs.concordia.ca

  16. while while ( <expression> ) <statements> end Serguei A. Mokhov, mokhov@cs.concordia.ca

  17. r Read access w Write access x Execute access e Existence o Ownership z Zero size s Non-zero size f Plain file d Directory l Symbolic link b Block special file c Character special file p Named pipe (FIFO) S Socket special file File Inquiry Operators:-op file Serguei A. Mokhov, mokhov@cs.concordia.ca

  18. 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. Serguei A. Mokhov, mokhov@cs.concordia.ca

  19. Bourne ShellQuick Ref Serguei A. Mokhov, mokhov@cs.concordia.ca

  20. 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. Serguei A. Mokhov, mokhov@cs.concordia.ca

  21. Quick Resource Summary • Manual Pages:man bash • An Intro to UNIX Shell:<http://steve-parker.org/sh/bourne.html> • How To Write a Shell Script:<http://www.tinker.ncsu.edu/LEGO/shell_help.html> Serguei A. Mokhov, mokhov@cs.concordia.ca

  22. Bourne Shell Script Constructs Reference • System/Internal Variables • Control Flow (if, for, case) Serguei A. Mokhov, mokhov@cs.concordia.ca

  23. Internal Variables Serguei A. Mokhov, mokhov@cs.concordia.ca

  24. Internal Variables (2) • Use shift command to shift the arguments one left: • Assume intput: • ./shift.sh 1 2 foo bar • $0 = <directory-of>/shift.sh • $1 = 1 • $3 = 2 • $4 = foo • $5 = bar • shift: • $1 = 2 • $2 = foo • $3 = bar Serguei A. Mokhov, mokhov@cs.concordia.ca

  25. 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 Serguei A. Mokhov, mokhov@cs.concordia.ca

  26. Control Flow: if • General Syntax: • <expression> can either be a logical expression or a command and usually a combo of both. if[ <expression> ]; then <statements> elif <statements> else <statements> fi Serguei A. Mokhov, mokhov@cs.concordia.ca

  27. 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 Serguei A. Mokhov, mokhov@cs.concordia.ca

  28. case • Syntax: case <expression> in <patter1>|<value1>) command1 ;; <patter2>|<value2>) command2 ;; esac Serguei A. Mokhov, mokhov@cs.concordia.ca

  29. 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 Serguei A. Mokhov, mokhov@cs.concordia.ca

  30. for • Syntax: • List can also be a result of a command. for variable in <list of values/words>[;] do command1 command2 … done Serguei A. Mokhov, mokhov@cs.concordia.ca

  31. for (3) for file in *.txt do echo File $file: echo "======" cat $file echo "======" done Serguei A. Mokhov, mokhov@cs.concordia.ca

  32. while • Syntax while <expression> do command1 command2 … done Serguei A. Mokhov, mokhov@cs.concordia.ca

  33. until • Syntax until <expression> do command1 command2 … done Serguei A. Mokhov, mokhov@cs.concordia.ca

  34. To Be Continued... Serguei A. Mokhov, mokhov@cs.concordia.ca

More Related