SHELL 的基本知识
一、为什么学习shell
对于一个合格的系统管理员来说,学习和掌握Shell编程是非常重要的。通过编程,可以在很大程度上简化日常的维护工作
,使得管理员从简单的重复劳动
中解脱出来。
二、shell 的定义和功能
- Shell又称
命令解释器
,它能识别用户输入的各种命令,并传递给操作系统。它的作用类似于 Windows操作系统中的命令行,但是,Shell的功能远比命令行强大的多。在UNIX或者localhost中, Shell既是用户交互的界面,也是控制系统的脚本语言。 - 如果有一系列经常需要使用的命令,把它存储在一个文件里,shell可以读取这个文件并顺序执行其中的命令,我们把这样的文件就叫
shell脚本
。shell脚本按行解释文件里的命令。
三、shell 的分类
- Bourne Shell
标识为sh
,该Shell由Steve Bourne在贝尔实验室时编写。在许多Unix系统中,该Shell是root用户的默认的Shell。(但红帽8.2当前系统的默认的shell是/bin/bash) - Bourne-Again Shell
标识为bash
,该Shell由Brian Fox在1987年编写,是绝大多数localhost发行版的默认的Shell。 - Korn Shell
标识为ksh
,该Shell由贝尔实验室的David Korn在二十世纪八十年代早期编写。它完全向上兼容 Bourne Shell 并包含了C Shell 的很多特性。 - C Shell
标识为csh
,该Shell由Bill Joy在BSD系统上开发。由于其语法类似于C语言,因此称为C Shell。- 查看当前系统支持的shell
【命令
】cat /etc/shells - 查看当前系统默认shell
【命令
】echo $SHELL
- 查看当前系统支持的shell
四、shell 的脚本的基本元素
- 声明:声明用哪个命令解释器来解释并执行当前脚本文件中的语句,一般写的解释器为
#!/bin/bash 或 #!/bin/sh - 命令:可执行语句,实现程序的功能。(变量定义,if-else,for,while)
- 注释:说明某些代码的功能,通过在代码中增加注释可以提高程序的可读性。
单行注释
:#多行注释
::<<BLOCK(start)(单词自定义)
BLOCK(end)
- 例:
五、shell 脚本编写规范
- 变量命名有意义
- 文件开头指定脚本解释器,也就是声明
- 开头加版本特权等信息
- 脚本中尽量不要使用中文注释
- 多使用内部命令
常用的内部命令有:echo、eval、exec、export、read、shift、exit···
六、shell 脚本的执行方式
1. 交互式执行
- do–>执行,done–>结束
- 缺点:不能永久保存代码
- 例如:
2. 作为程序文件执行(脚本执行)-- 四种方法
bash
filename.sh(会产生子进程,再运行,使用当前指定的bash shell去运行。
./
filename.sh(会产生子进程,再运行,使用脚本里面指定的shell去运行。使用该种方式执行需要x权限)
source
filename.sh(source命令是一个shell内部命令,其功能是读取指定的shell程序文件,并且依次执行其中的所有的语句,并没有创建新的子shell进程,所以脚本里面所有创建的变量都会保存到当前的shell里面)
.
filename.sh(和source一样,也是使用当前进程执行)注意
:如果在命令行定义一个变量data,再创建一个脚本写 echo $data ,执行该脚本。bash 和 ./ 这两种执行方式不会输出值,source 和 . 可以。因为命令行定义变量是定义在当前进程的,而前两种会产生新的子进程运行,后两种才是在当前进程下执行脚本。
七、shell 脚本的退出状态
- 在UNIX或者Linux中,每个命令都会返回一个退出状态码。退出状态码是一个整数,其有效范围为0~255。通常情况下,
成功的命令返回0,而不成功的命令返回非0值
。非0值通常都被解释成一个错误
码。行为良好的UNIX命令,程序和工具都会返回0作为退出码来表示成功。- 【
命令
】echo $? # 获取退出状态码
- 【
- Shell脚本中的函数和脚本本身也会返回退出状态码。在脚本或者是脚本函数中执行的最后的命令会决定退出状态码。另外,用户也可以在脚本中使用exit语句将指定的退出状态码传递给Shell。