Linux Shell编程学习笔记(5)

Linux Shell编程学习笔记(2015-7-20)

分类:linux shell

一:shell函数

  同大多数高级语言一样,在shell脚本中可以定义并调用函数。函数的定义格式为:

[function] 函数名()
{
    命令表
}

  在shell中函数必须先定义再使用。函数定义之后可以被调用任意多次。调用函数时,直接使用函数名,不必带上圆括号,就像使用命令一样。调用函数不会产生新的进程,而是在shell脚本所属的进程内执行。
  shell脚本可以利用位置变量向函数传递数据。另外,在函数体内可以访问脚本中任何定义在函数外面的变量,但是不能访问其它函数内用local关键字定义的局部变量。通常,函数中最后一个命令执行完之后,函数即退出。也可以使用return命令在任意位置退出函数(与C语言是类似的)。

    biantiao@lazybone1994-ThinkPad-E430:~/sh$ cat shellFunction.sh
    #! /bin/bash

    output()
    {
        echo "--------------------"
        echo $a $b $c
        echo $1 $2 $3
        echo "--------------------"
    }

    input()
    {
        local y

        echo "Please input value of x and y"
        read x y
    }

    a="Working directory"
    b="is"
    c=`pwd`

    output You are welcome

    x=
    input
    echo "Value of x is $x, value of y is $y"

    biantiao@lazybone1994-ThinkPad-E430:~/sh$ ./shellFunction.sh
    --------------------
    Working directory is /home/biantiao/sh
    You are welcome
    --------------------
    Please input value of x and y
    2 3
    Value of x is 2, value of y is 
    biantiao@lazybone1994-ThinkPad-E430:~/sh$ source shellFunction.sh
    --------------------
    Working directory is /home/biantiao/sh
    You are welcome
    --------------------
    Please input value of x and y
    2 3
    Value of x is 2, value of y is 
    biantiao@lazybone1994-ThinkPad-E430:~/sh$ 

说明:由于y是一个由local声明的局部变量,在函数体外不具有可见性,因此最后输出的y为空。

二:shell内部命令

  迄今为止,接触过了许多shell内部命令,这里再介绍几个重要的shell内部命令。

eval命令

格式:
eval [参数]
  eval命令会首先扫描参数,所有的参数被读取并连接成一个字符串,然后eval再将该字符串当成命令来执行。例如:

biantiao@lazybone1994-ThinkPad-E430:~/sh$ var="wc -l for1.sh"
biantiao@lazybone1994-ThinkPad-E430:~/sh$ eval $var
11 for1.sh
biantiao@lazybone1994-ThinkPad-E430:~/sh$ 

exec命令

格式:
exec [arg...]
  它在本shell中执行由参数arg指定的命令,该命令将替代本shell进程,即执行命令后命令行shell将不复存在,命令退出整个shell就退出了。

readonly命令

格式:
readonly [name...]
  readonly命令给定的name(变量名)是只读的,如果没有给定参数,则列出所有只读变量的清单。使用readonly标记变量等价于使用了declare -r标记。

trap命令

格式:
trap [arg] [n]...
  arg是当shell收到信号n时所读取并执行的命令。当设置trap时,arg被扫描一次。在trap被执行时,arg也被扫描一次。所以通常用单引号把arg对应的部分括起来。trap命令可用来设定接收到某个信号所完成的动作,忽略某个信号的影响或者恢复信息产生时系统的预设动作。
  trap命令按信号的顺序执行。允许的最高信号码是16.试图对当前shell已忽略的信号设置trap无效;试图对信号11(内存故障)设置trap,则产生错误。trap命令有以下几个常用的用法:
- 为某些信号指定处理的方式。例如:

biantiao@lazybone1994-ThinkPad-E430:~$ trap 'echo "breaking signal got" > ~/exit.txt' 0 1 2 3 15

说明:当shell脚本收到信号0(从shell退出),信号1(挂起),信号2(中断),信号3(退出)或信号15(过程结束)时,都将执行由单引号括起来的命令,即在家目录下创建一个exit.txt文件,其中记录了接收到信号的提示和时间。

  • 指定arg为空串以忽略信号。例如:
biantiao@lazybone1994-ThinkPad-E430:~$ trap 0 1 2 3 15

说明:本设置忽略所有的0 1 2 3 15信号。

  • 不指定arg,把所有的信号的动作恢复到原来系统默认的动作。例如:
biantiao@lazybone1994-ThinkPad-E430:~$ trap 0 1 2 3 15

wait命令

格式:
wait [n]
  wait命令等待进程ID为n的进程终止,并报告终止状态,如果没有指定n,则等待当前所有的活动的子进程终止。wait命令的返回码始终是0。

你可能感兴趣的:(Linux,Shell)