第一部分:Linux Shell 简介
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
当一个用户登陆linux 系统后,系统就会为该用户创建一个shell程序。
Shell的版本:
Bourne Shell:是贝尔实验室开发的,unix普遍使用的shell,在编程方面比较优秀,但在用户交互方面没有其他shell优秀。
BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell,在bourne shell基础上增强了很多特性,如命令补全,命令历史表等等
Korn Shell:是对Bourne Shell 的发展,在大部分内容上与Bourne Shell兼容,集成了C Shell和Bourne shell优点。
C Shell:是SUN公司Shell的BSD版本,语法与c语言相似,比bourne shell 更适合编程
第二部分 Shell 程序设计基础 2.1 Shell 输入输出 2.1.1 echoecho命令可以显示文本行或变量取值,或者把字符串输入到文件中
格式: echo string
echo的常用功能:\c 不换行 \f 不进纸 \t 跳格 \n 换行
note:
对于linux系统,必须使用-e选项来使以上转义符生效
例:
$ echo -e "hello\tboy" hello boyecho命令对特殊字符敏感,如果要输出特殊字符,需要用\屏蔽其特殊含义。
常用的特殊字符:双引号"" 反引号`` 反斜线\
例:
read命令从键盘或者文件的某一行文本中读入信息,并将其赋给一个变量。
如果只指定了一个变量,read会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车
格式: read var1 var2 …
例1:
如果输入的值个数多于变量个数,多余的值会赋给最后一个变量:
例2:
cat可以用来显示文件,并且支持将多个文件串连接后输出
note:该命令一次显示完整个文件,若想分页查看,需使用more
格式: cat [ options ] filename1 … filename2 …
常用options:
-v 显示控制字符
-n 对所有输出行进行编号
-b 与-n相似,但空白行不编号
例:
$ cat file1 file2 file3 // 同时显示三个文件 $ cat –b file1 file2 file3 2.1.4 管道 |可以通过管道把一个命令的输出传递给另外一个命令做为输入
格式: 命令1 | 命令2
例:
把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中
如果想看到输出的同时,把输出也同时拷入一个文件,这个命令很合适
格式: tee -a file
-a 表示文件追加到末尾
file 表示保存输出信息的文件
tee命令一般和管道符|结合起来使用
例:
当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件,见下表
文件 文件描述符输入文件-标准输入 0
输出文件-标准输出 1
错误输出文件-标准错误 2
系统中实际上有12个描述符,可以任意使用文件描述符3-9
标准输入
对应文件描述符0,是命令的输入,缺省键盘
标准输出
对应文件描述符1,是命令的输出,缺省屏幕或文件
标准错误
对应文件描述符2,是命令错误的输出,缺省屏幕或文件
利用文件重定向功能对命令的标准输入,输出和错误进行修改。
常用文件重定向命令:
结合使用标准输出和标准错误
$ cat hello 1>myfile.out 2>myerror.out合并标准输出和标准错误
$ cat >>mylog.out 2>&1 <hello 2.2 Shell 后台执行命令 2.21 cron