Shell最基本的工作就是执行命令。以互动的方式来使用Shell很容易了解一点:每键入一道命令,Shell就会执行。像这样:
[many@avention test]$ cd my_sh ; ls -l *sh
-rwxrw-r--. 1 many many 85 Feb 7 2018 10.sh
-rwxrw-r--. 1 many many 115 Feb 7 2018 11.sh
-rwxrw-r--. 1 many many 102 Feb 12 2018 12.sh
上述命令展示了UNIX命令行的原理:
首先,格式很简单,以空白(Space 键或 Tab 键)隔开命令行中各个组成部分。
其次,命令名称是命令行的第一个项目。通常后面会跟着选项(option),任何额外的参数(argument)都会放在选项之后。
第三,选项的开头是一个破折号(或减号),后面接着一个字母。选项是可有可无的,有可能需要加上参数。不需要参数的选项可以合并。
最后,分号( ; )可用来分隔同一行里的多条命令。Shell会依次执行这些命令。如果你使用的是 & 符号而不是分号,则Shell将在后台执行其前面的命令,这意味着,Shell不用等到该命令完成,就可以继续执行下一个命令。
Shell识别三种基本命令:内建命令、Shell函数以及外部命令:
- 内建命令就是由Shell本身所执行的命令。有些命令是由其必要性才内建的,例如cd用来改变目录,read会将来自用户(或文件)的输入数据传给Shell变量。另一种内建命令的存在则是为了效率,其中最典型的就是test命令,编写脚本时会经常用到它。另外还有echo 与 printf 。
- Shell函数是功能健全的一系列程序代码,以Shell语言写成,它们可以像命令那样引用。
- 外部命令就是由Shell的副本(新的进程)所执行的命令,基本的过程如下:
- 建立一个新的进程,此进程即为Shell的一个副本。
- 在新的进程里,在PATH变量内列出的目录中,寻找特定的命令。/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin 为PATH变量典型的默认值。当命令名称含有斜杠(/)符号时,将略过路径查找步骤。
- 在新的进程里,以所找到新程序取代执行中的Shell程序并执行。
- 程序完成后,最初的Shell会接着从终端读取下一条命令,或执行脚本里的下一条命令。
当然,以上只是基本程序。Shell可以做的事很多,例如变量与通配字符的展开、命令与算数的替换等。
父shell等待子shell完成。