1. Shell脚本最常用于系统管理工作,或是用于结合现有的程序以完成小型的、特定的工作。
2. 现在UNIX系统都会拥有好几个Shell,因此需要告知UNIX内核应该以哪个Shell来执行所指定的Shell脚本。方法是:通过脚本文件中特殊的第一行来设置:
在第一行的开头处使用 #! 这两个字符。但是开头的这一行的长度限制是从63到1024个字符,所以,尽量不要超过64个字符。
3. 在一行里可以放置多条命令,之间用分号(;)分隔,Shell会依次执行这些命令。
4. Shell识别三种基本命令: 内建命令、Shell函数和外部命令;
内建命令就是由Shell本身所执行的命令;
Shell函数是功能健全的一系列程序代码,以Shell语言写成,它们可以像命令那样引用。
外部命令就是由Shell的副本(新的进程)所执行的命令。
5. Shell变量的命名规则与C++相同,以字母或下划线开头,由任意长度的数字、字母以及下划线组成。
注意在给变量赋值时,如myname=hello,等号两端是没有任何空格的。
6. echo命令
原始的echo命令只会将参数打印到标准输出,参数之间以一个空格隔开,并以换行符结尾。
BSD版本的echo看到第一个参数为 -n 时,会省略结尾的换行符号,如echo -n "Enter your name: "
7. printf命令
printf命令模仿C程序库里的printf()库程序。它几乎复制了该函数所有的功能。printf命令的完整语法分为两部分:
printf format - string [arguments ...]
8. 重定向与管道
以 < 改变标准输入:program < file可将program的标准输入修改为file
以 > 改变标准输出:program > file可将program的标准输出修改为file
以 >> 改变标准输出:program >> file可将program的标准输出附加到file的结尾处。
以 | 建立管道:program1 | program2 可将program1的标准输出修改为program12的标准输入。
9. tr命令 :tr [options ] source-char-list replace-char-list
用途:转换字符。例如,将大写字符转换成小写。选项可让你指定所要删除的字符,以及将一串重复出现的字符浓缩成一个。
10. 构造管道时,应试着让每个阶段的数据变得更少。换句话说,如果你有两个要完成的步骤与先后次序无关,可以把会让数据量变少的那一个步骤放在管道的前面。
这么做可以提升脚本的整体性能,例如,使用sort排序之前,先以grep找出相关的行。
11. 特殊文件:/dev/null 与 /dev/tty (待补充...)
12. 环境变量PATH
$PATH是一个以冒号分隔的目录列表,可以在列表所指定的目录下找到所要执行的命令。Shell会沿着查找路径$PATH来寻找命令。
如果要编写自己的脚本,最好准备好自己的bin目录来存放它们,并且让Shell能够自动找到它们。这不难,只要建立自己的bin目录,并将它加入到$PATH的列表即可:
$ cd 切换到home目录
$ mkdir bin 建立个人的bin目录
$ mv nusers bin 将我们的脚本置入该目录
$ PATH=$PATH:$HOME/bin 将个人的bin目录附加到PATH
$ nusers 试试看,Shell找到并执行它
要让修改永久生效,在.profile文件这把你的bin目录加入$PATH,而每次登录时Shell都读取.profile文件