Shell Notes(2)

> 数组

NAMES=(max helen sam zach)

NAMES[*] 取出所有数据,然后作为一个元素返回

NAMES[@] 取出所有数据,但是返回的仍然是一个数组,可以用来完成数组的赋值

> export

使父进程的变量对子进程可见、可用;一旦利用expert生命一个变量作为参数,shell就会把变量的值传递到子进程得到调用环境中,使用的是传值调用 每个子进程在使用变量时得到变量的副本。

eg. export cheese=american

或 cheese=american

     export cheese

> typeset

函数内,局部变量用typeset修饰,避免重名

------------------------------------------------常用到的特殊参数-----------------------------------------------

> $$

当前运行的进程的PID

> $!

$!保存了后台运行的进程的PID

> $?

进程的退出状态,或者叫命令运行的返回状态码,可以通过检测$?,判断运行的结果

> $#

命令行上,除了命令之外的参数的个数

> $0

执行程序的命令的名称

> $1~$n

命令行参数

> $*

命令行参数的列表,包含了所有的命令行参数。$* 是一个参数,即:所有的命令行参数作为一个元素,整体地被输出。

> $@

类似于$* , 也返回命令忙参数的列表,不同的是,$@返回的是一个列表,一组元素,命令行参数作为一个列表返回,每个命令行参数是独立的。

注意:$*与$@在加" "的条件下,才显示出不同来

---------------------------------------------------------------------------------------------------------------------

> set

初始化命令行参数变量。set将set后面跟的一个或几个参数赋值给位置参数。

> read

内置命令,读入用户输入,将内容存储到用户指定的变量中。eg. read filename

如果不想指定一个变量保存read的输入内容,可以这样:read –p “Input:”。然后read 到的内容保存到了$REPLY变量中,echo "$REPLY" 可以查看读到的内容。其中,选项“-p  ”来显示用户的提示。“Input:”只是一个输入提示,可以为“”,但是不能没有。

read –p “prompt” 后面可以跟一个变量,存取读到的内容,也可以不加变量,读到的值通过$REPLY获得。

也可以跟多个变量,read输入的时候,用空格隔开。

image

如果输入的变量个数少于脚本指定的个数,未赋值的变量为空:

image

image

如果输入变量个数多余脚本指定的个数,多出来的输入值都作为最后一变量的内容:

image

 

> 使用read读取文件

image

注意:是在while语句的末尾,也就是done后面,使用重定向“<”,将待扫描的文件名作为输入。

image

> exec

主要两个目的:1、在不用创建一个新进程来执行一个命令;2、重定向来自shell脚本内部的文件描述符

>/dev/tty

表示用户的工作屏幕。

发往/dev/tty设备的信息不会被转移(不会重定向来自脚本的标准输出和错误输出)。即使使用了标准输出重定向,发往/dev/tty的数据也会照常显示。

image

image

> trap

捕捉在脚本运行的时候发生的信号,便于用户在接收到信号后即使采取措施。

格式:trap ['commads'] [signal]

当捕捉到信号signal后,执行命令commands。如果要屏蔽某些信号,commands为空' '。

常用信号6个:1(挂起),2(中断Ctrl+C),3(退出),9(结束),15(软件中断),20(停止Ctrl+Z)

屏蔽多个信号时,空格隔开即可。eg. trap ' ' 1 2 3 15

trap可以用来在脚本运行中捕捉信号,也可以用来在运行结束后,做一些清理工作。eg.

image

> getopts

借助这个工具,可以实现给自己写的脚本配置选项。

我觉得,getopts就是一个在shell里被调用的一个工具,专门用来处理$1~$n,省去人手动地对$*的解析,将$1~$n输入给getopts,他就可以按照 选项、参数 把$0~$n解析出来,后面,直接使用getopts输出的结果就可以了。

看下面的例子:

imageimage

getopts的使用格式: getopts optstring varname

如例子中的,getopts 处理的选项串为 :bt:uw: ,以“:”开头,表示由脚本负责产生错误信息,也就是屏蔽了getopts的错误输出

t和w后面加“:”表示这两个选项需要输入参数。

getopts按照类似循环的方式,处理选项串,用到了两个特殊的变量OPTIND(选项索引),OPTARG(选项参数)。OPTIND从1开始,getopts每发现一个参数,OPTIND就加1 .

由上图,可见,getopts读取了$0~$n的全部:因为-b 的OPTIND 为2 。

当getopts发现一个非法的选项时,将varname置为?,并发OPTARG设为选项字母;

当getopts发现一个选项缺少参数,将varname置为:,并把OPTARG设为缺少参数的选项。

如果忽略optstring开头的:,则不管是非法选项还是丢失参数,都会使varname为?:,如果OPTARG变量没有设置,getopts就会把自己的诊断信息写到标准输出。

posted @ 2012-08-27 20:27  郝玉琨  阅读(253)  评论(0编辑  收藏  举报