Академический Документы
Профессиональный Документы
Культура Документы
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)
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.
July 17, 2003 Serguei A. Mokhov, mokhov@cs.concordia.ca 4
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
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 6
Make the shell an executable first and then run is a command (set up an execution permission):
% chmod u+x myshellscript
Or:
% ./myshellscript (should always work)
July 17, 2003 Serguei A. Mokhov, mokhov@cs.concordia.ca 8
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.
July 17, 2003 Serguei A. Mokhov, mokhov@cs.concordia.ca 9
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.
July 17, 2003 Serguei A. Mokhov, mokhov@cs.concordia.ca 10
11
Variables
Variables start with a $ sign when they are used.
$x, $val
if
if ( <expression> ) then <statements> else if ( <another-expression> ) then <statements> else <statements> endif
13
foreach
foreach var ( <list-of-values> ) <statements> end
14
switch
switch ( string ) case str1: <statements> breaksw ... default: <statements> breaksw endsw
15
while
while ( <expression> ) <statements> end
16
17
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.
July 17, 2003 Serguei A. Mokhov, mokhov@cs.concordia.ca 18
19
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.
July 17, 2003 Serguei A. Mokhov, mokhov@cs.concordia.ca 20
22
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
Serguei A. Mokhov, mokhov@cs.concordia.ca 23
shift:
$1 = 2 $2 = foo $3 = bar
July 17, 2003 Serguei A. Mokhov, mokhov@cs.concordia.ca 24
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 25
Control Flow: if
General Syntax:
if [ <expression> ]; then <statements> elif <statements> else <statements> fi
<expression> can either be a logical expression or a command and usually a combo of both.
July 17, 2003 Serguei A. Mokhov, mokhov@cs.concordia.ca 26
if (2)
Some Logical Operators:
-eq -ne -lt -gt -o -a -f -d
July 17, 2003
--- Equal --- Not equal --- Less Than --- Greater Than --- OR --- AND --- file --- directory
Serguei A. Mokhov, mokhov@cs.concordia.ca 27
File or directory?
case
Syntax:
case <expression> in <patter1>|<value1>) command1 ;; <patter2>|<value2>) command2 ;; esac
July 17, 2003 Serguei A. Mokhov, mokhov@cs.concordia.ca 28
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
July 17, 2003 Serguei A. Mokhov, mokhov@cs.concordia.ca 29
for
Syntax:
for variable in <list of values/words>[;] do command1 command2 done
for (3)
for file in *.txt do echo File $file: echo "======" cat $file echo "======" done
July 17, 2003 Serguei A. Mokhov, mokhov@cs.concordia.ca 31
while
Syntax
while <expression> do command1 command2 done
32
until
Syntax
until <expression> do command1 command2 done
33
To Be Continued...
34