Korn Shell by Levone


									      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.
•   $ bc
•   2.34567 * 3.56789
•   2^300
•   $ bc –l –q
       Library Functions with bc
•   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
•   $ bc –l –q
•   scale = 12;
•   s(3.333) --- Calculate sin(x) to 12 digits
•   c(4.567)
     More about echo Command
• Use echo command to display text or value of variable.
• echo [options] [string, variables...]
  Displays text or variables value on screen.
  -n Do not output the trailing new line.
  -e Enable interpretation of the following backslash
  escaped characters in the strings:
  \a alert (bell)
  \b backspace
  \c suppress trailing new line
  \n new line
  \r carriage return
  \t horizontal tab
  \\ backslash
• $ echo -e "An apple a day keeps away
           More about echo
• 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

  $ 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
• echo `date` To execute command
        The read Statement

• Use to get input (data from user) from
  keyboard and store (data) to variable.
  read variable1, variable2,...variableN
               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
•     read ENTRY            # Read the variable ENTRY from the user
•     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.
From your current 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
• 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
• Type in your password enter
• Type /bin/ksh will change your login shell
  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
                  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
• 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
 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
•   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
•   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
• 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
          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
• 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.
     Kernel thread---Privileged
• Besides user processes, Unix systems
  include a few privileged processes
• ---Kernel thread.
• 1. They run Kernel Mode in the kernel
  address space.
• 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
                                  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
• 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
  specific interface. The advantages are:
• 1. Device-specific code can be encapsulated in a specific
• 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.
• 4. Dynamically load and unload device drivers to
  minimize the kernel image stored in RAM.
                 Kernel Basis
• 1. Sharing the CPU and RAM between competing

• 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 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

                   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
        Perform I/O            read/write
           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
                    Hardware errors
priority 0
                                              Pointers to
           1             Clock                 kernel
           2           Disk I/O               Handlers


           4     Traps (software interrupt)
   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
•   echo -e "\n\nEnter your password>"
•   read pword_1
•   clear
•   echo -e "\n\n This system is locked ..... "
•   pword_2=
•   until [ "$pword_1" = "$pword_2" ]
•   do
•   read pword_2
•   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

• 2. There are some ways one can enter the
  system without password.
• 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
  priority than your process.
       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.
       A menu-driven application
              EDIT          REPORTS




• 1. ULIB program
• 2. EDIT program
• 3. ADD program

To top