笔者最近几天非常清闲,闲来无事,就自己看书学习,也顺便找合适的有激情的工作:这样就不会拿着低低的工资了%>_<%。呵呵。

continuing:

这张貌似写的是bash的function函数。

所谓的函数在shell里面定义的是a group of shell command united by if,case,for structure。确实很贴切。基于这样的工作主要是为了解决某些repeated工作。标准格式是:

name(){

function body's code come here

}

书中写到exit要慎用,一旦exit被执行,那么整个当前程序是回退出的,是被terminated。

function fatal{

echo"$0:fatal error:" "$@">&2

exit 1

}

说道这么一个函数的例子,书中写,bash默认开启trap扩展,trap是捕捉陷阱的意思,你可以用它来捕捉错误,来输出提示,类似于java中的try catch吧。大家可以试试,我以前也试过,适合在子shell中使用,如果在当前shell设置了这玩意儿,它就没完没了地提示影响当前正常工作了。提到函数,还要说说函数中的arguments和整个脚本的$1,$2是怎么处理的。子函数的$1也是存在于主函数一样地位的,在执行过程中如果用到了某个子函数的位置arguments,那么就会在主函数的位置变量出插入子函数的$1,$2,进行执行,执行完成子函数,就会恢复既有的主函数的$1,$2.额,这个有点绕,我说的只是机制,希望大家自行去查找资料了解。不赘述。

##############

额,这个o'reilly的书籍很有意思,先讲function,再讲述variable。下面就开始讲变量。普通和环境变量。不过o'reilly书籍丛书都非常专业,大家最好读英文原版,要买的话都买影印版,虽然贵,但是保持原著的完整性。

变量名的命名规则是letters(字符)、数字digit和下划线underscores。不能以数字开头,通过=赋值,=两边不能有空格。shell有一个约定by convention,系统的变量都是uppercase大写的。所以,当你在linux设置环境变量的时候JAVA_HOME这些都是大写的。bash没有所谓的数据类型,所有的数字和字符默认都为string,它是弱语言。如果想要使用算术,声明可以使用declare -i声明的变量就是integer类型,如果是常量的话,可以使用let,或者加上双引号来使其变成数字。

例子:i=5=3;echo $i

declare -i jj;jj=5=3;echo $jj

还有+=这些运算符都同c语言。下面是我摘抄的例子:

$ name=Arnold

$ name+=" Robbins" ; echo $name String variable

Arnold Robbins

$ declare -i jj ; jj=3+5 ; echo $jj Integer variable

8

$ jj+=2+4 ; echo $jj

14

$ pets=(blacky rusty) Array variable

$ echo ${pets[*]}

blacky rusty

$ pets+=(raincloud sparky)

$ echo ${pets[*]}

blacky rusty raincloud sparky

最后一个数组的运算机器牛叉,有代表性,大家记住一个关键的形式就行了。

注意:时间和实践都是检验真理的唯一标准。希望大家好自为之。

#######################################

下面讲述的变量的替换和引用。这个比较纠结。讲完知识点,说个自己的囧故事。

var=value 正常的赋值,也是最简单的赋值。

${var}为什么要使用这种形式呢,是因为存在数组的原因。加上{}就能取整体的值。############听着titannic专辑音乐,收到一个offer,感觉好伤感。。###,我要休息会。明天再写了。