Bash Shell - Northern Illinois University

Download Report

Transcript Bash Shell - Northern Illinois University

CSCI 330
THE UNIX SYSTEM
Bash shell
BASH SHELL SPECIFICS
Shell login and logout files
 Shell variables
 Prompt
 History
 IO redirection

CSCI 330 - The Unix System
2
INVOKING BASH

On the command line:

as login shell


CSCI 330 - The UNIX System
% sh
% bash
specified in /etc/passwd
with file as argument
file is sh-script
% sh scriptfile

3
STARTUP & SHUTDOWN FILES
executed for login shell

/etc/bash.bashrc
~/.bashrc
executed for non-login shell

options:




--norc
 -l


~/.bash_logout
CSCI 330 - The Unix System
/etc/profile
~/.bash_profile
~/.bash_login
~/.profile

don’t run initialization files
run as login shell
4
PREDEFINED SHELL VARIABLES
Description
PWD
The most recent current working directory.
OLDPWD
The previous working directory.
BASH
The full path name used of the bash shell.
RANDOM
Generates a random integer between 0 and 32,767
CSCI 330 - The Unix System
Shell
Variable
HOSTNAME The current hostname of the system.
PATH
A list of directories to search of commands.
HOME
The home directory of the current user.
PS1
The primary prompt (also PS2, PS3, PS4).
5
USER-DEFINED SHELL VARIABLES

CSCI 330 - The Unix System
Syntax:
varname=value
Example:
rate=7.65
echo “Rate today is: $rate”
use double quotes if the value of a variable
contains white spaces
Example:
name=“Thomas William Flowers”

6
NUMERIC VARIABLES

Syntax:
CSCI 330 - The Unix System
let varname=value

can be used for simple arithmetic:
let count=1
let count=$count+20
let count+=1
7
ARRAY VARIABLES

Syntax:
CSCI 330 - The Unix System
varname=(list of words)

accessed via index:
${varname[index]}
${varname[0]}
${varname[*]}
first word in array
all words in array
8
USING ARRAY VARIABLES
Examples:
CSCI 330 - The UNIX System
% ml=(mary ann bruce linda dara)
% echo ${ml[*]}
mary ann bruce linda dara
% echo ${ml[2]}
bruce
% echo ${#ml}
4
9
EXPORTING VARIABLES

Syntax:
export varname(s)
declare –x varname(s)
CSCI 330 - The Unix System

Environment variable is created by exporting
shell variable
10
VARIABLES COMMANDS


To prohibit change
readonly varname
CSCI 330 - The Unix System

To delete both local and environment variables
unset varname
list all shell variables (including exported)
set
11
USING “SET” TO CHANGE OPTIONS
“set” is a builtin command of bash
 “set +o” can be used to change an option

To keep I/O redirection from overwriting a file
set +o noclobber
CSCI 330 - The Unix System

12
VARIABLE MANIPULATION

name
 offset
 length

– the name of the variable
– beginning position of the value
– the number of positions of the value
CSCI 330 - The Unix System
use portion of a variable’s value via:
${name:offset:length}
Example:
%
%
%
%
SSN="123456789"
password=${SSN:5:4}
echo $password
6789
13
SPECIAL VARIABLE

USES
${#variable}

${variable:-value}
if variable is undefined use “value” instead
 ${variable:=value}
CSCI 330 - The Unix System
number of characters in variable’s value
if variable is undefined use “value” instead, and
set variable’s value

${varname:?message}
if variable is undefined display error “message”
14
BASH

SHELL PROMPT
can be set via “PS1” shell variable

CSCI 330 - The UNIX System
Example:
% PS1="$USER > "
z036473 >
Secondary prompts:
PS2, PS3, PS4
15
BASH

SHELL PROMPT
Example:
% PS1="\u@\h-\!: "
ege@turing-22:
CSCI 330 - The UNIX System
special “PS1” shell variable settings:
\w current work directory
\h hostname
\u username
\! history event number
\d date
\t time
\a ring the “bell”
16
COMMAND HISTORY LIST
View or re-issue previously executed commands
 Size of history can be set via shell variables:
HISTSIZE=500
HISTFILESIZE=100

Command line editing via keys:





UP ARROW: move back one command in history list
DOWN ARROW: move forward one command
LEFT and RIGHT ARROW: move into command
BACKSPACE and DELETE: Remove information
TAB: complete current command or file name
CSCI 330 - The Unix System

17
I/O REDIRECTION
Short Description
cmd > file
Send output of cmd to file
cmd >> file
Append output of cmd to file
cmd < file
Take input from file
cmd << text
Read stdin up to a line identical to
text a.k.a “here command”
CSCI 330 - The Unix System
Command Syntax
18
FILE DESCRIPTOR
positive integer for every open file
 process tracks its open files with this number


CSCI 330 - The Unix System
0 – standard input
1 – standard output
2 – standard error output
bash uses file descriptor to refer to a file
19
REDIRECTION SYNTAX


Input:
< or 0<
Combining outputs:
2>&1
Example:
% cat hugo > /tmp/one 2>&1
CSCI 330 - The Unix System

Output:
> or 1> filename
2> filename
20
QUOTING
Quoting allows you to distinguish between the
literal value of a symbol and the symbols used as
code
 You need a way to distinguish between the literal
symbol and the symbol’s use as a metacharacter
or wild card characters
 To do this you must use of the following symbols:

CSCI 330 - The Unix System
Backslash (\)
 Single quote (‘)
 Double quote (“)

21
A BACKSLASH (\)
A backslash is also called the escape character
 It allows you to preserve only the character
immediately following it

For example:
to create a file named “tools>”, enter:
% touch tools\>
CSCI 330 - The Unix System

22
THE SINGLE QUOTE (‘)

A single quote is used to protect the literal
meaning of metacharacters.

Examples:
CSCI 330 - The Unix System
It protects all characters within the single quotes
 The only character it cannot protect is itself
 A single quote cannot occur with other single quotes
even if preceded by a backslash

% echo 'Joe said 'Have fun''
Joe said Have fun
% echo 'Joe said "Have fun"'
Joe said "Have fun"
23
A DOUBLE QUOTE (“)
Double quotes protect all symbols and characters
within the double quotes.
 Double quotes will not protect these literal
symbols: $ (dollar sign), ! (history event), and \
(backslash).
 Examples:

CSCI 330 - The Unix System
% echo "I've gone fishing'"
I've gone fishing'
% echo 'Jake won $500.00'
Jake won $500.00
% echo "You've" earned '$5.00'
You've earned $5.00
24
COMMAND SUBSTITUTION
Used to substitute the output of a command in
place of the command itself
 Two forms of command substitution:

Examples:
% echo "User $(whoami) is on $(hostname)"
User ege is on lx
% echo "Today is" `date`
Today is Sun Jul 17 08:06:28 CDT 2007
CSCI 330 - The Unix System
$(command)
`command`
25
USING THE “EVAL” COMMAND
Evaluates a command line,
performs all shell substitutions, and then
executes the command line
 Used when normal parsing of the command line
is not enough
 Results in a second round of variable substitution

CSCI 330 - The Unix System

Same capability as in C-shell
26