Presentation is loading. Please wait.

Presentation is loading. Please wait.

July 17, 2003Serguei A. Mokhov, 1 Shells and Shell Scripts COMP 444/5201 Revision 1.3 January 25, 2005.

Similar presentations


Presentation on theme: "July 17, 2003Serguei A. Mokhov, 1 Shells and Shell Scripts COMP 444/5201 Revision 1.3 January 25, 2005."— Presentation transcript:

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

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

3 July 17, 2003Serguei 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.

4 July 17, 2003Serguei 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.

5 July 17, 2003Serguei 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

6 July 17, 2003Serguei 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)

7 July 17, 2003Serguei 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).

8 July 17, 2003Serguei 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)

9 July 17, 2003Serguei 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.

10 July 17, 2003Serguei 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

11 July 17, 2003Serguei A. Mokhov, mokhov@cs.concordia.ca 11 tchs Quick Ref

12 July 17, 2003Serguei 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

13 July 17, 2003Serguei A. Mokhov, mokhov@cs.concordia.ca 13 if if ( ) then else if ( ) then else endif

14 July 17, 2003Serguei A. Mokhov, mokhov@cs.concordia.ca 14 foreach foreach var ( ) end

15 July 17, 2003Serguei A. Mokhov, mokhov@cs.concordia.ca 15 switch switch ( string ) case str1: breaksw... default: breaksw endsw

16 July 17, 2003Serguei A. Mokhov, mokhov@cs.concordia.ca 16 while while ( ) end

17 July 17, 2003Serguei A. Mokhov, mokhov@cs.concordia.ca 17 File Inquiry Operators: -op file 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

18 July 17, 2003Serguei 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.

19 July 17, 2003Serguei A. Mokhov, mokhov@cs.concordia.ca 19 Bourne Shell Quick Ref

20 July 17, 2003Serguei 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.

21 July 17, 2003Serguei A. Mokhov, mokhov@cs.concordia.ca 21 Quick Resource Summary Manual Pages: man bash An Intro to UNIX Shell: How To Write a Shell Script:

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

23 July 17, 2003Serguei A. Mokhov, mokhov@cs.concordia.ca 23 Internal Variables $# Will tell you # of command line arguments supplied $0 Ourselves (i.e. name of the shell script executed with path) $1 First argument to the script $2 Second argument, and so on… $? Exit status of the last command $$ Our PID $! PID of the last background process $- Current shell status

24 July 17, 2003Serguei 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 = /shift.sh –$1 = 1 –$3 = 2 –$4 = foo –$5 = bar shift : –$1 = 2 –$2 = foo –$3 = bar

25 July 17, 2003Serguei 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

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

27 July 17, 2003Serguei 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

28 July 17, 2003Serguei A. Mokhov, mokhov@cs.concordia.ca 28 case Syntax: case in | ) command1 ;; | ) command2 ;; esac

29 July 17, 2003Serguei 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

30 July 17, 2003Serguei A. Mokhov, mokhov@cs.concordia.ca 30 for Syntax: List can also be a result of a command. for variable in [;] do command1 command2 … done

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

32 July 17, 2003Serguei A. Mokhov, mokhov@cs.concordia.ca 32 while Syntax while do command1 command2 … done

33 July 17, 2003Serguei A. Mokhov, mokhov@cs.concordia.ca 33 until Syntax until do command1 command2 … done

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


Download ppt "July 17, 2003Serguei A. Mokhov, 1 Shells and Shell Scripts COMP 444/5201 Revision 1.3 January 25, 2005."

Similar presentations


Ads by Google