1.命令与参数
shell的基本功能是执行命令,这一点在用shell用来进行交互时可以得到充分的证明。你一次输入一个命令,shell就执行他们。就像下面的这个例子:
$ cd work ; ls -l whizprog.c
-rw-r--r-- 1 tolstoy devel 30252 Jul 9 22:52 whizprog.c
这个例子表现出了unix shell行的最基本的东西,首先,格式相当简单,用空格来分割shell行中不同的组件。
其次命令的名字是该shell行中的第一个项,最为典型的是选项紧随其后,紧接着就是的参数,没有下面奇怪的语法:COMMAND=CD,ARG=WORK
COMMAND=LISTFILES,MODE=LONG,ARG=WHIZPROG.C
最后选项由破折号开始,由单个字符构成,选项是可选的并且可能需要一个参数。选项可以组合,例如ls -lt 或者是ls -l -t
多个选项正日益普遍,特别是在GNU各种标准组件中。
$ cd whizprog-1.1 $ patch --verbose --backup -p1 < /tmp/whizprog-1.1-1.2-patch
多个选项是否以单个破折号或两个破折号开始要取决于解释器。上面的例子中的 < /tmp/whizprog-1.1-1.2-patch 是IO重定向,该命令的功能是patch命令去读取文件 /tmp/whizprog-1.1-1.2-patch ,而不是从键盘读取。
最后分号来分割同一行中的多个命令,shell顺序地执行他们。如果你使用&而不是分号,那么shell就会在后台处理该命令,这就意味着shell不会等到该命令结束后去执行下个命令。
shell能识别三种功能性的命令:内置命令,shell函数和外部命令。
内置命令仅仅是shell自己执行的命令,有些命令从必要性考虑被内置了,例如cd--改变目录,read --从用户或者一个文件得到输入赋给shell变量,其他命令被内置是因为考虑到效率,最为典型的是test命令,它在shell脚本和IO命令中广泛使用。
shell函数是自包用shell语言编写的代码,它和命令一样方式被调用。
外部命令是通过创建单独的进程由shell运行,其基本的步骤是:
1创建一个新进程,该进程以shell的副本开始
2在新进程中,搜索在路径变量中列出的目录,当命令名字包含一个斜线时,路径搜索跳过。
3在新进程中,通过用新的程序取代正在运行的shell程序来执行发现的程序。
4当程序结束时,原来shell继续从终端读入下一条命令,或者运行脚本里的下一条命令。
这点有点像中断的特点。这是基本的处理流程,让然shell可以为你做许多其他的事情,例如变量,通配符,命令和算术替代等等。
2.变量
变量是你给某个特定信息的名字,例如first_name或driver_lic_no。所有的编程语言都有变量,并且shell没有异常。每一个变量都有一个值那shell来说,变量可以,并且通常可以为空,即意味着它不包含任何字符,这是合法的,常见的,并且非常有用。空值指引null。shell变量名字以字母或者下划线开始,可以包含多个数字,没有任何字符数字的限制,shell变量指引字符串值。
$ myvar=this_is_a_long_string_that_does_not_mean_much Assign a value $ echo $myvar Print the value this_is_a_long_string_that_does_not_mean_much
正如你所看到的,变量使用=符号赋值,值没有空格。shell变量值可以通过$加变量名字来取回。
当给一个变量分配一个包含空格的字符串时,使用引号
first=isaac middle=bashevis last=singer Multiple assignments allowed on one line fullname="isaac bashevis singer" Use quotes for whitespace in value oldname=$fullname Quotes not needed to preserve spaces in value
双引号在连接两个变量值时,是必须的
fullname="$first $middle $last" Double quotes required here