# Korn Shell by Levone

VIEWS: 50 PAGES: 73

• pg 1
```									      Some simple examples
• A Hi CAR
• . CAR car, for example
• EDIT f1 case1

• (week13)
Floating Number in Unix
• bc – or precisely, bc programming language.
• bc is "an arbitrary precision calculator
language" with syntax similar to the C
programming language.
• It is generally used by typing the command bc on
a Unix command prompt and entering a
mathematical expression, such as (1 + 3) * 2,
whereupon 8 will be outputted.
Example
•   \$ bc
•   2.34567 * 3.56789
•   2^300
•   \$ bc –l –q
Library Functions with bc
command
•   bc –l
•   s(x) – the sin(x) in radians
•   c(x) –
•   a(x) –
•   l(x) –
•   e(x) –
•   j(n, x) – the Bessel function of order n of x
Example
•   \$ bc –l –q
•   scale = 12;
•   s(3.333) --- Calculate sin(x) to 12 digits
•   c(4.567)
• Use echo command to display text or value of variable.
• echo [options] [string, variables...]
Displays text or variables value on screen.
Options
-n Do not output the trailing new line.
-e Enable interpretation of the following backslash
escaped characters in the strings:
\b backspace
\c suppress trailing new line
\n new line
\r carriage return
\t horizontal tab
\\ backslash
Example
• \$ echo -e "An apple a day keeps away
\a\t\tdoctor\n"
• Display colorful messages
• echo “Hello, world!”
• echo -e "\033[34m Hello Colorful World."

• (hello_color   week13)
• That echo statement uses ANSI escape
sequence (\033[34m), above entire string (
i.e. "\033[34m Hello Colorful World." )
is process as follows
• 1) First \033, is escape character, which
causes to take some action.
• 2) Here it set screen foreground color to
Blue using [34m escape code.
• 3) Then it prints our normal message Hello
Colorful World! in blue color.
If we want to display that echo
statement in red
• echo -e "\033[31m Hello Colorful World.“

• In general:
• Syntax
echo -e "\033[escape-code your-message"
• More detail, see file cs315\Echo_sequence
Shell Arithmetic
• Use to perform arithmetic operations.
• Syntax:
expr op1 math-operator op2

Examples:
\$ expr 1 + 3
\$ expr 2 - 1
\$ expr 10 / 2
\$ expr 20 % 3
\$ expr 10 \* 3
\$ echo `expr 6 + 3`
Double quote, single quote,
and back quote
• echo “Today is `date`”
• Double quote remove the meaning of the
characters except “\$” and “\”.

• echo „Today is `date`‟
• Enclosed in single quotes remains
unchanged
• echo `date` To execute command

• Use to get input (data from user) from
keyboard and store (data) to variable.
Syntax:
env command
• Displays your UNIX environment variables.

• env ENTER

• Notice the difference between “env” and “set”.
• “set” will display all variables while env only
displays the environmental variables.
Variable assignment

• Variables are assigned in a script program
as follows:
• DONE=no
• They are used in this manner:
• while [ \$DONE = no ] in your script
•   #! /bin/bash
•   DONE=no
•   ENTRIES="hello bye ls 1"
•   while [ \$DONE = no ]
•   do
•     echo Valid entries are: \$ENTRIES
•     case \$ENTRY in
•     1)
•         pwd
•         ;;
•     hello)
•         echo How are you?
•         ;;
•     bye)
•         echo exiting...
•         DONE=yes
•         ;;
•     ls)
•         ls -al |more
•         ;;
•     *)
•         echo \$ENTRY is an unrecognized command.
•         ;;
•     esac
•   done       (looping week13)
/bin and Running Shell Script
•   To run a script, we can:
•   1. ./script_Name
•   2 . script_Name
•   3. sh script_Name
•   In fact, we can run the script with some
other ways.
The difference between . Script_Name and ./script_Name

• You can also run a script by using:

• bash script_Name enter
• . Script_Name
Create a bin directory
mkdir bin under your home directory.
Type: cp script_name ../bin to copy the script
into /bin directory. Or,
cp * ../bin to copy all your files to the
bin directory.
Now, you can run them directly by type in the
script_Name.
Example
• Run looping script under current directory
• cp looping ../bin enter

• Type looping enter
• This time, you can type in the script
name and run it directly.
chsh –Change Shell
• chsh enter
to Korn shell
What Is Korn Shell?

– The Korn shell (/bin/ksh) is the most advanced
'standard' UNIX shell. It extends the Bourne
shell with lots of nice features, and is a lot
faster.
Korn Shell
•   It was written by David Korn.
•   It is a powerful superset of the Bourne shell.
•   The improvements include :
•   1. Job control
•   2. Command line editing
•   3. Programming features.
Korn Shell

Korn is superset of Bourne. zsh
claims to be an enhanced Korn shell,
while bash has added some parts of it
Aliases in Korn shell
• The corn shell allows you to create your
own commands by using the alias
command.
• Example:
• \$ alias d= `ls –l` in standard Unix
• Example in In our Linux
• alias l=ls [Enter]
• alias AA=“cal 2004”
Exception in using alias in Korn
• All built-in commands may be aliased
except for:
• case, do, done, elif, else, esac, fi, for,
function, if, select, then, time, until, while,
{,}
Remove an alias-unalias
• The unalias will remove all of the specified
aliases.
format: unalias aliasName [Enter]
Functions in Korn shell
• Korn shell allows one to define functions
that may be invoked as shell commands.
• Two basic format to define a function in
Korn shell:
• 1. Function name
•    {
•      list
•     }
Function --- cont.

• 2. Name ( )
• {
•    list
• }
• This format looks similar to C language
format.
Example
•   f()
•   {
•   echo parameter l = \$1
•   echo parameter list = \$*
•   }
•   # main program
•   fl
•   f cat dog goat
•   (week13 func6)
Enhanced job control
•   Command :
•    jobs --- Display current jobs
•   bg %job# --- resumes the specified job as
•                a background process.
•   fg %job# --- resumes the specified job as
•                the foreground process.
•   kill
TILDE “~” substitution
•   ~ --- \$HOME
•   ~user --- home directory of user
•   Example echo ~ ENTER
•   ~/pathname --- \$HOME pathname
•   ~+ --- \$PWD (current working directory)
•   ~- --- \$OLDPWD (previous working
directory)
More
•   let x=y+z written as ( ( x = y + z ))
•   select - allows use of simple menus
•   functions can be written with parameters
•   f( )
•   {
•   echo \$1 \$2 \$3
•   } called by f cat dog cow
While … Do… Done
•   #!/bin/ksh
•   message ( )
•   {
•     echo hi
•     echo there
•   }
•   i=1
•   while (( i <= 3))
•   do
•    message #call the function
•   let i=i+1
•   done              (while week13) “sh while 5” for example
•   Run “sh while 9” for example
•
Function in General Form
• function name
• {
• list of command
• } # the keyword function may be omitted
•
Function in General Form
•   name ( )
•   {
•   list of command
•   }
Using typeset to declare a local
variable
• Example: fact2 (week13)
Typeset in Korn
• The typeset command can also be used to
assign values, but unless you are setting
attributes, it's a lot more work for nothing.
If a value is not given, the variable is set to
null. Here, X is reassigned the null value:
• \$ X=
Korn Shell
• Variables and parameters are used by the
Korn shell to store values.
• Like other high-level programming
languages, the Korn shell supports data
types and arrays.
• This is a major difference with the Bourne,
C shell, and other scripting languages,
which have no concept of data types.
Korn Shell
• The Korn shell supports four data types:
string, integer, float, and array.
• If a data type is not explicitly defined, the
Korn shell will assume that the variable is a
string.
Integer (–i) Attribute

• The integer attribute (–i) is used to explicitly
declare integer variables.
•
• NUM is set to an integer-type variable and
assigned a value:
• \$ typeset —i NUM=1
• \$ print \$NUM 1
Float (–E, –F) Attribute

• The float attributes (–E, –F) are used to
declare float variables. The –E is used to
specify the number of significant digits,
while –F is used to specify the precision.
Float Attribute
•   \$ typeset —E5 X=123.456
•   \$ print \$X 123.46
•   \$ typeset —F5 X=123.456
•   \$ print \$X 123.45600
Assigning Values to Variables
• variable=declare variable and set it to null
• typeset variable=declare variable and set it
to null
• variable=valueassign value to variable
• typeset variable=valueassign value to
variable
Kernel
• 1. The kernel itself is not a process but a
• process manager.
• 2. System calls are some specific program
constructs that perform the kernel service
required by processes.
• 3. Each system call sets up the group of
parameters that identifies the process
request and then executes the hardware-
dependent CPU instructions to switch from
User Mode to Kernel Mode.
processes
• Besides user processes, Unix systems
include a few privileged processes
• 1. They run Kernel Mode in the kernel
• 2. They do not interact with users, and thus
do not require terminal devices.
• 3. They usually created during startup and
remain alive until the system is shut down.
Transition between User Mode and Kernel Mode

• .

Process1     Process1           Process2        Process2

User Mode

Kernel Mode

System call                        Interrupt
handler
Scheduler       handler

System call          Timer            Device
interrupt        interrupt
Process Implementation
• To let the kernel manage processes, each
process is represented by a process descriptor
that includes information about the current state
of the process.
• When kernel stops the execution of a process, it
saves the current contents of several processor
registers in the process descriptor. These
include: PC, SP, General-purpose registers,
floating point registers, processor control
registers,
• and the memory management registers.
Device Drivers
• The kernel interacts with I/O devices by
means of device drivers and each driver
interacts with the remaining part of the
kernel (even with other drivers) through a
• 1. Device-specific code can be encapsulated in a specific
module.
• 2. Vendors can add new devices without knowing the
kernel source code: only the interface specifications
must be known.
• 3. The kernel deals with all devices in a uniform way
and accesses them through the same interface.
minimize the kernel image stored in RAM.
Kernel Basis
• 1. Sharing the CPU and RAM between competing
processes.

• 2. Processing all system calls.

• 3. Handling all peripherals.

• The kernel is mainly written in C, and some parts
of the kernel was written in assembly language.
• Users only interact with the kernel by system
calls interface.
Kernel

Kernel Basics
• 1. Sharing the CPU and RAM between
competing progresses
• 2. Processing all system calls
• 3. Handling peripherals
• It mostly written in C, some parts of the
kernel are written in assembly language
• Users only interact with the kernel by
system calls interface
Device Driver Interface
P               P              P            P

System call interface

Virtual File System
Kernel         Character device files        Block device files

tty         Tape                      Disk
driver      driver                    driver

tty           tty            Tape         Disk         Disk
Kernel Subsystems
•   1. Memory Management
•   2. Process Management
•   3. Inter-process Communication
•   4. Input/Output
•   5. File Management
Kernel Subsystem Summary

Kernel Subsystems
•   1. Memory Management
•   2. Process Management
•   3. Inter-process Communication
•   4. Input/Output
•   5. File Management
Kernel, hardware, and software
• .
Process           Process            Process

System calls
Kernel

Hardware interrupt

Peripheral       Peripheral       Peripheral
User Mode and Kernel Mode
• Normally, when a user process is running, it
operates in a special machine mode called
user mode.
• The only way for a user process to enter
kernel mode is to execute a system call.
System calls
• .
Open a file            open
Close a file              close
Send a signal            kill

Create a pipe            pipe

Create a socket     socket
Duplicate a process   fork
Terminate a process     exit
Hardware Interrupt
• .               Interrupt vector table
Highest
Hardware errors
priority 0
Pointers to
1             Clock                 kernel
Interrupt
2           Disk I/O               Handlers

Keyboard
3

4     Traps (software interrupt)
Lowest
priority
Interrupt can be interrupted!
• Because of the priority, a lower
priority interrupt can be interrupted by
a higher priority interrupt.
Screen Saver Script Example
•   # name: lock
•   # function: lock the screen until a correct password is entered
•   #
•   clear
•   clear
•   echo -e "\n\n This system is locked ..... "
•   pword_2=
•   until [ "\$pword_1" = "\$pword_2" ]
•   do
•   done
•   clear
•   echo "The password you typed in is correct! You can use the computer
now!“ week14 lock1
Problems with the lock1
• 1. Password being displayed while entering
it.

• 2. There are some ways one can enter the
• Such as ctrl+c …
• The reason is that it can cause an interrupt
to the kernel and the kernel knows about the
device. The kernel interrupt has higher
Some of the shell signals
•   Signal # Name          Meaning
•    1 hang up Terminal connection lost
•    2 interrupt One of the interrupt key
•    3     quit   One of the quit key
•    9     kill  The kill –9 has been issued
•   15 terminator The kill command has been
•                  issued.
trap command
• We can use the trap command to disable the
signals created by the kernel.
• Basically, it change the process default
action to whatever you specify.
• Example:
• trap “optional commands” signal numbers
• Trap “echo I refuse to die!” 15 display the
message instead of terminate the process.
• (week14 lock3 use the trap command)
Trap cont…
• If you write trap “ “ [signal] numbers
• The system just ignore the signals.
ULIB
•
EDIT          REPORTS

REPORT_NO

DISPLAY

UPDATE

DELETE
Examples
• 1. ULIB program
• 2. EDIT program